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

标签 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版本是原因?无论如何,我将非常感谢任何指导!

最佳答案

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

关于c++ - 获取PE头在内存中的虚拟地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18749747/

相关文章:

c++ - 聪明的 if/else 结构

c++ - Ifstream 从文本文件中读取错误的字符

c++ - 测试 C++98 字符串是否为科学计数法的数字

c++ - 如何在 c 中返回一个 float 数组并将其保存为一个 float 数组以备后用?

python - 在 Windows 中显示资源管理器的文件属性对话框

c++ - 数据声明中不允许虚拟

c++ - WinApi,::TextOut 具有不同的字体(如 Tahoma)错误

delphi - 当程序在一定时间内不使用时自动关闭

c - 如何设置Win32窗口非客户区的大小(native)

c# - 如何使控制台应用程序在关闭时优雅地退出