【发布时间】:2015-08-13 16:47:27
【问题描述】:
我正在编写一个应用程序来加载自己的DLL,并在目标进程中重写一些代码以实现某些目标。我用Cheat Engine检查了内存块,发现我要重写的内存区域是“执行/只读”。但奇怪的是(至少对我而言)我能够通过外部程序使用 WriteProcessMemory 重写内存块,但不能通过我自己加载到目标进程内存中的 DLL 使用 memcpy。
有没有其他方法可以重写进程内的操作码,还是需要使用WriteProcessMemory来重写?
【问题讨论】:
-
WriteProcessMemory可能会绕过内存页面访问保护。memcpy只是底层的一个普通 for 循环。您不能在您所在的同一进程中调用WriteProcessMemory吗? -
我的蜘蛛侠感觉在这里刺痛......即使你有正当理由这样做(而你不,不管你为什么认为你这样做或什么你的理由是)如果你不知道为什么
memcpy失败了,那么你就没有资格做你想做的事。对不起,直言不讳。 -
@尔上校,没有。现在就是这样。 WriteProcessMemory 修改保护。这样做,你就可以很好地使用 memcpy。 for 循环不相关。
-
@DavidHeffernan 这就是我的意思。
memcpy是一个用户态函数,因此它会像常规的字节复制 for 循环一样触发段错误,而WriteProcessMemory可能会绕过页面保护。