assembly VirtualProtectEx函数实际上是做什么的?(WINAPI)

w46czmvw  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(216)

这是一个应该在内存中的特定位置(在特定进程中)修补字节的函数。
VirtualProtectEx函数实际上是做什么的?为什么需要它来修补字节?

void PatchEx(BYTE* dst, BYTE* src, unsigned int size, HANDLE hProcess)
{
    DWORD oldprotect;
    VirtualProtectEx(hProcess, dst, size, PAGE_EXECUTE_READWRITE, &oldprotect);
    WriteProcessMemory(hProcess, dst, src, size, nullptr);
    VirtualProtectEx(hProcess, dst, size, oldprotect, &oldprotect);
}

我试着在msdn上查找它,但我真的不明白他们的描述。
我不明白为什么它是必需的。因为我认为我已经有写内存的权利了?为什么我需要给它额外的权利,DWORD oldprotect;的意义是什么?

2eafrhcq

2eafrhcq1#

正如文档所说,VirtualProtectEx在指定的进程中更改内存范围的内存保护设置。(与VirtualProtect相反,它总是在当前进程上工作。)
在这个特殊的例子中,第一次调用这个函数可以确保你要写的内存实际上是可写的,同时将旧的保护设置存储在oldprotect中。这只是做个好公民
因为我认为我已经有权利写记忆?
你可能有权限访问这个进程(如果没有,函数将失败,但你实际上没有检查)。但默认情况下,进程中的代码是不可写的。如果进程运行在与你的黑客相同的特权级别和会话中,你有权限更改它。但你需要这样做。
另外,很明显你自己没有写这个函数,所以在你的特定情况下,内存甚至可能是可写的,原作者不能假设这一点。

相关问题