我正在.NET 中尝试内存访问。目前,我有一个托管程序,它启动一个非托管进程并检索BaseAddress
其加载的模块之一(DLL)。我想做的是以某种方式读取已加载模块的 PE 标头,以便我以后可以检索其导出的地址。
不幸的是,我找不到任何关于此的好信息。有任何想法吗?
我正在.NET 中尝试内存访问。目前,我有一个托管程序,它启动一个非托管进程并检索BaseAddress
其加载的模块之一(DLL)。我想做的是以某种方式读取已加载模块的 PE 标头,以便我以后可以检索其导出的地址。
不幸的是,我找不到任何关于此的好信息。有任何想法吗?
这是 PE 文件格式的一个很好的起点。
您可以从必须将标头复制到进程中的基地址P/Invoke ReadProcessMemory 。您需要将读入的内存解析为各种 PE 标头。第一个标头是IMAGE_DOS_HEADER,它将指向IMAGE_NT_HEADERS。然后,您可以使用 IMAGE_NT_HEADERS 中的IMAGE_OPTIONAL_HEADER来查找二进制文件中IMAGE_EXPORT_DIRECTORY的位置。