8

所以我玩了一个 DLL (UnityEditor.dll) 我想获取这个托管 DLL 中所有非托管函数的列表(dll 可能由本机 C++ 组成(如果使用的话,使用静态编译的库)核心和托管C++ 包装器全部包装到一个 dll 中。)我想获取该 Dll 中所有非托管函数的列表,例如创建我自己的托管\非托管包装器?

4

3 回答 3

13

dumpbin.exeVisual Studio 附带的实用程序可用于显示导出列表。例如:

dumpbin.exe /EXPORTS C:\WINDOWS\System32\Kernel32.dll

示例输出:

Microsoft (R) COFF/PE 翻车机版本 10.00.30319.01
版权所有 (C) 微软公司。版权所有。


转储文件 C:\Windows\System32\kernel32.dll

文件类型:DLL

  部分包含 KERNEL32.dll 的以下导出

    00000000 个特征
    4E20FBA0 时间日期戳 Sat Jul 16 03:46:56 2011
        0.00 版本
           1 个序数基数
        1390个功能
        1390个名字

    序号提示 RVA 名称

          1 0 AcquireSRWLockExclusive(转发到 NTDLL.RtlAcquireSRWLockExclusive)
          2 1 AcquireSRWLockShared(转发到 NTDLL.RtlAcquireSRWLockShared)
          3 2 00004440 激活ActCtx
          4 3 00066B80 添加原子
          5 4 00066B20 AddAtomW
          6 5 0006ADF0 添加控制台别名A
          7 6 0006AE60 添加控制台别名W
于 2012-07-25T20:21:44.157 回答
2

打开 .dll 文件并使用Microsoft 提供的二进制 PE/COFF 规范查找此 PE 文件的 EXPORT 部分。

但我认为那是矫枉过正。你的问题应该是一个具体的需求。你到底想包装什么,你有什么?只有二​​进制文件,没有源/头文件?

于 2012-07-25T20:22:34.223 回答
2

DLL 不包含“函数”。它们包含代码和入口点。除非您有调试数据库,否则无法从优化代码中分辨出函数之间发生转换的位置。

于 2012-07-25T20:40:08.183 回答