如何读取内存中加载的模块的PE头?

时间:2009-10-13 21:52:43

标签: c# .net memory portable-executable

我在.NET中尝试内存访问。目前,我有一个托管程序,它启动一个非托管进程,并检索其中一个加载模块(DLL)的BaseAddress。我想做的是以某种方式读取加载模块的PE头,以便我以后可以检索其导出的地址。

不幸的是,我找不到任何关于此的好消息。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

This是PE文件格式的一个很好的起点。

您可以从基地址P / Invoke ReadProcessMemory将标题复制到您的流程中。您需要将读取的内存解析为各种PE头。第一个标题是IMAGE_DOS_HEADER,它会指向IMAGE_NT_HEADERS。然后,您可以使用IMAGE_NT_HEADERS中的IMAGE_OPTIONAL_HEADER来查找二进制文件中IMAGE_EXPORT_DIRECTORY的位置。