【发布时间】:2016-02-24 13:56:04
【问题描述】:
我试图让 calc.exe 显示一个消息框,但 calc.exe 总是在我执行我的程序时崩溃。所以我尝试将代码注入到我自己的进程中,以便查看调试消息。这样做会给我一个指向pData->msg的异常“访问冲突...无法执行...”。然后我发现pThread 和pData 得到了相同的地址。这怎么可能?我实际上将VirtualAllocEx 的lpAddress 设置为pPage 和pPage + 128 以获取不同的起始地址。
// Allocate page
void *pPage = VirtualAllocEx(hProcess, NULL, 256, MEM_RESERVE, PAGE_EXECUTE_READWRITE);
// Commit memory for thread procedure
void *pThread = VirtualAllocEx(hProcess, pPage, 128, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
// Commit memory for thread data
void *pData = VirtualAllocEx(hProcess, (void*)((long long)pPage + 128), 128, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
// WriteProcessMemory, do stuff
// Release memory
VirtualFreeEx(hProcess, pPage, 256, MEM_RELEASE);
【问题讨论】:
标签: c++ winapi virtualalloc