所以一般来说,人们说要获得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版本是什么原因?无论如何,我会非常感谢任何指导!
答案 0 :(得分:2)
因为要将IDH.e_lfanew
添加到int *
,其中每个元素的长度为4个字节,我希望e_lfanew
是字节偏移量,而不是{{1}的数量进入结构。