如何获取DLL中的函数列表(托管和非托管)?

时间:2012-07-25 20:19:29

标签: c++ windows dll unmanaged

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

3 个答案:

答案 0 :(得分:10)

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

  

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

示例输出:

Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\Windows\System32\kernel32.dll

File Type: DLL

  Section contains the following exports for KERNEL32.dll

    00000000 characteristics
    4E20FBA0 time date stamp Sat Jul 16 03:46:56 2011
        0.00 version
           1 ordinal base
        1390 number of functions
        1390 number of names

    ordinal hint RVA      name

          1    0          AcquireSRWLockExclusive (forwarded to NTDLL.RtlAcquireSRWLockExclusive)
          2    1          AcquireSRWLockShared (forwarded to NTDLL.RtlAcquireSRWLockShared)
          3    2 00004440 ActivateActCtx
          4    3 00066B80 AddAtomA
          5    4 00066B20 AddAtomW
          6    5 0006ADF0 AddConsoleAliasA
          7    6 0006AE60 AddConsoleAliasW

答案 1 :(得分:2)

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

但我觉得这太过分了。你的问题应该是一个具体的想法。你究竟想要包装什么,你有什么?只有二​​进制文件而没有源/标题?

答案 2 :(得分:2)

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