在内存中获取PE头的虚拟地址

时间:2013-09-11 19:34:46

标签: c++ winapi

所以一般来说,人们说要获得PE头地址所需要做的就是......像这样:

IMAGE_DOS_HEADER* IDH = (IMAGE_DOS_HEADER*)GetModuleHandle(NULL);

IMAGE_NT_HEADERS * INT = (IMAGE_NT_HEADERS *)((int *)IDH + (int)IDH.e_lfanew);

然而,经过几个小时的思考为什么它对我不起作用,我意识到我还需要将IDH.e_lfanew除以4.所以我只能以这种方式得到正确的指向IMAGE_NT_HEADER结构的指针:

IMAGE_NT_HEADERS * INT = (IMAGE_NT_HEADERS *)((int *)IDH + (int)(IDH.e_lfanew/4));

有人可以向我解释为什么我要分开它?我的操作系统是Windows 8 64位。也许我的Windows版本是什么原因?无论如何,我会非常感谢任何指导!

1 个答案:

答案 0 :(得分:2)

因为要将IDH.e_lfanew添加到int *,其中每个元素的长度为4个字节,我希望e_lfanew是字节偏移量,而不是{{1}的数量进入结构。