【问题标题】:Getting virtual address of PE header in memory [duplicate]获取内存中PE头的虚拟地址[重复]
【发布时间】:2013-09-11 19:34:45
【问题描述】:

所以一般来说,人们说你所要做的就是得到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版本是原因?无论如何,我将非常感谢任何指导!

【问题讨论】:

  • Loading PE Headers一样的错误
  • 我相信如果你将这个 (int*) 更改为 (int) 你不需要除以 4...可能只是一个指针问题。

标签: c++ winapi


【解决方案1】:

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

【讨论】:

  • 非常感谢。这就是原因
猜你喜欢
  • 2018-07-09
  • 2021-07-25
  • 2011-03-13
  • 2023-03-17
  • 2012-04-03
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
相关资源
最近更新 更多