【问题标题】:How to get list of functions inside a DLL (managed and unmanaged)?如何获取 DLL 中的函数列表(托管和非托管)?
【发布时间】:2012-07-24 08:54:05
【问题描述】:

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

【问题讨论】:

  • 你是指出口吗?
  • 说定义为extern C ...或类似的函数
  • UnityEditor.dll 是一个托管 dll,它所做的只是包装对 Unity 的 C++ 代码的调用。您可以使用 dotPeek 查看其代码。

标签: c++ windows dll unmanaged


【解决方案1】:

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

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

【讨论】:

  • 我从中得到的只是:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>dumpbin.exe /EXPORTS "C:\Program Files (x86)\ppp \UnityEngine. dll" Microsoft (R) COFF/PE Dumper 版本 10.00.40219.01 版权所有 (C) Microsoft Corporation。版权所有。文件转储 C:\Program Files (x86)\ppp\UnityEngine.dll 文件类型:DLL 摘要 2000 .reloc 2000 .rsrc 74000 .text C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>
  • @myWallJSON,则该 DLL 没有导出任何函数。您可以调查dumpbin 的其他选项。
  • 即使“ALL”也不提供任何信息。非托管 DLL 包装在本机 one=(
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-17
      • 2019-03-31
      • 2010-10-14
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多