我正在尝试启动或访问一个扫雷实例来挂钩并根据需要调用它的功能来播放一些并创建一个求解器。我尝试了两种方法:使用它启动一个进程,并使用在线发现的方法在其中注入一个dll。两者都遇到了同样的问题:当我从我的程序或我注入的库中访问扫雷库的内存时,我得到了错误998。你建议我做什么?我不太了解Windows API,所以我不知道问题出在我正在使用的方法上,或者我是否需要做一些额外的函数调用或更改某些设置。
答案 0 :(得分:2)
您的问题很可能是在尝试写入目标内存而不更改页面保护。可执行页面通常是只读的(并且是可执行的)。您需要使用VirtualProtect来更改此保护。通常,这种代码将被执行:
DWORD flOldProtect;
VirtualProtect((LPVOID)from, 5, PAGE_EXECUTE_READWRITE, &flOldProtect);
...
VirtualProtect((LPVOID)from, 5, flOldProtect, &flOldProtect);
此代码更改了保护,因此您可以写入保护。您可以在...
中执行挂钩代码等,然后恢复页面保护。 Here是我之前为某人写的一个非常基础的教练,它通过DLL注入工作。