【问题标题】:How to find a (PE)Executable entry point in RAW memory?如何在 RAW 内存中找到(PE)可执行入口点?
【发布时间】:2016-04-08 16:46:31
【问题描述】:

我正在做一个 ASM 项目,我想知道一个可移植可执行程序在原始内存中的入口点。原始内存是指静态内存,就像我使用十六进制编辑器编辑原始 .exe 文件一样。从程序的 PE 表中,我可以查找名为“EntryPoint:”的条目,但该条目一旦加载到内存中就包含程序的入口点!我需要找到程序将在磁盘中的原始内存中查找第一条指令的位置。有些程序从 .text 部分的第一个地址开始执行,这很常见但并不总是发生,这就是我想知道入口点的原因。

为此,我使用 Windows API 中的 MapViewOfFile 函数并将 example.exe 程序加载到内存中,然后查找其原始内容。

我目前正在使用 Radasm 与 MASM 合作

谢谢!

【问题讨论】:

    标签: assembly portable-executable


    【解决方案1】:

    入口点由 PE 标头中的AddressOfEntryPoint 给出,它为您提供入口点的虚拟地址。如果你想弄清楚文件在哪里,你需要通过节表并找出哪个节包含该虚拟地址——即具有VirtualAddressVirtualSize的节,这样AddressOfEntryPoint是 >= VirtualAddress 并且偏移量 AddressOfEntryPoint - VirtualAddress 是 VirtualSize。

    找到后,只需计算 PointerToRawData + 偏移量即可确定它在文件中的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多