我正在尝试实现已知的“Win32 EXE 的动态分叉”方法,即 RunPE。我的问题是我无法获得“基地址”的正确结果,正如它在http://www.security.org.sg/code/loadexe.html的第三点中提到的那样
这是我的代码:
DWORD* peb;
DWORD* baseAddress;
...snip...
GetThreadContext(hTarget, &contx)
peb = (DWORD *) contx.Ebx;
baseAddress = (DWORD *) contx.Ebx+8;
_tprintf(_T("The EBX [PEB] is: 0x%08X\nThe base address is: 0x%08X\nThe Entry Point is: 0x%08X\n"), peb, baseAddress, contx.Eax);
输出如下:
EBX [PEB] 为:0x7FFD4000
基地址为:0x7FFD4020
入口点是:0x00401000
我认为我的问题在于我的 baseAddress 指针的实现,但我无法弄清楚到底是什么问题。或者可能是我没有正确理解上面的文章并且 baseAddress 不是 ImageBase,如果是这样,什么是 baseAddress ?
我曾尝试在 Win 7 64b 和 Win-XP 下运行它,并且在两者上我都得到了相同的错误结果。