第一个无效,但是第二个正常 但是为什么呢?
WriteInt32((IntPtr)0x4EE444,0); WriteInt32((IntPtr)0x510CE0,0);
它没有给出任何错误消息,只是没有改变
答案 0 :(得分:0)
0x4EE444地址可能没有正确的memory protection constant来进行写入。当您处理可执行内存时,通常就是这种情况。在这种情况下,必须使用VirtualProtectEx来获得正确的内存权限。通常,PAGE_EXECUTE_READWRITE是最佳选择,因为您需要写访问权,但您还希望它保留可执行权限,因为如果剥离内存页的可执行权限,则在指令指针指向该内存区域时会导致错误。没有可执行权限。
在覆盖任何汇编说明之前,您将需要执行此操作。在修改原始页面保护使其更加隐秘之后,恢复原始页面保护也是一种很好的做法。
对于与“无错误消息”有关的问题,大多数Windows API函数(包括WriteProcessMemory和VirtualProtect)的返回值将指示该函数的成功或失败,如果不是这种情况,则始终可以调用GetLastError()后记并检查错误代码。