【发布时间】:2010-12-06 11:53:11
【问题描述】:
我正在.NET 中试验内存访问。目前,我有一个托管程序,它启动一个 unmanaged 进程并检索其已加载模块(DLL)之一的BaseAddress。我想做的是以某种方式读取已加载模块的 PE 标头,以便稍后检索其导出的地址。
很遗憾,我找不到任何关于此的好信息。有什么想法吗?
【问题讨论】:
标签: c# .net memory portable-executable
我正在.NET 中试验内存访问。目前,我有一个托管程序,它启动一个 unmanaged 进程并检索其已加载模块(DLL)之一的BaseAddress。我想做的是以某种方式读取已加载模块的 PE 标头,以便稍后检索其导出的地址。
很遗憾,我找不到任何关于此的好信息。有什么想法吗?
【问题讨论】:
标签: c# .net memory portable-executable
This 是 PE 文件格式的一个很好的起点。
您可以从基地址 P/Invoke ReadProcessMemory 复制标头到您的进程中。您需要将读入的内存解析为各种 PE 标头。第一个标题是IMAGE_DOS_HEADER,它将指向IMAGE_NT_HEADERS。然后,您可以使用 IMAGE_NT_HEADERS 中的 IMAGE_OPTIONAL_HEADER 在二进制文件中查找 IMAGE_EXPORT_DIRECTORY 的位置。
【讨论】: