在.NET中解析普通的Win32 PE文件(Exe/DLL)

Usm*_*man 9 c# assemblies marshalling .net-3.5 portable-executable

我需要解析普通的Win32 DLL/Exe并从中获取所有导入和导出以在控制台或GUI(即Win Forms)上显示.是否可以通过读取其导出/导入表并从中获取托管类型来解析C#.NET中的Win32 DLL/Exe?由于它是非托管PE,.NET不允许您将非托管PE文件转换为托管.NET程序集,它只生成COM托管程序集.

如何解析这些表并以托管形式获取所有方法(签名).(例如,如果char*作为参数,它应显示为IntPtr).

Ste*_*ary 2

可以使用Microsoft 可移植可执行规范文档来解析 PE 文件。然而,正如 Logan 指出的,签名不包含在 PE 文件中;仅包含导出函数的名称。

更新:如果您的 dll 是由最新版本的 Microsoft C++ 编译器创建的 C++ dll,那么您可以通过调用以下函数来取消修饰损坏的名称以获取大部分签名:来自Debugging Tools for Windows 的UnDecorateSymbolName。但是,返回值不包含在损坏的名称中。