请教读取无效内存的问题。
各位大侠,小弟初学汇编,请教个问题。
我用cheat engine 打开某个进程的内存。
我在某个地方使用virtualallocex 申请了内存空间。新申请的内存随机分配为 0x001C0000,具有读写和执行权限。
用cheat engine 打开新申请的内存地址,显示如下:
............
001BFFE0 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
001BFFF0 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
001C0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
001C0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
001C0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
001C0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.........
.........
那么,注入自己的指令 mov eax, [001C0000] 是没问题的,因为0x001C0000 地址是有值而且可读的。
但是如果指令换成 mov eax, [001BFFF0] 就会出错,原因应该是 0x001BFFF0 是无效内存地址。
这时被调试打开的进程就会出现异常,从而退出。
我想请教的是,如何在注入代码中采取措施,判断 mov 操作的内存是否有效,避免程序出现异常退出,或者是出现异常后如何处理,让进程继续执行下一CPU指令而不退出。
注:1、进程是别人写的,我没有源代码,无法更改,只有申请内存,注入汇编代码。
2、不考虑先判断地址有效后再申请内存,因为mov 读取的地址有可能是在我注入代码一段时间后才无效的,而我的注入代码并没有改变,还在继续访问这个无效值。