如何打开用C ++创建的DLL文件来查看类,方法和源代码?

时间:2015-05-21 16:24:22

标签: c++ dll

我找到了一个用C ++创建的.dll文件。我想打开这个文件并查看类中的函数。

如何打开此文件并调用我的c ++项目中的函数?

1 个答案:

答案 0 :(得分:1)

使用Microsoft的命令行实用程序 dumpbin ,您可以显示DLL导入或导出的内容:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <Flume name="eventLogger" compress="true" type="persistent" dataDir="./logData">
      <Agent host="192.168.10.101" port="8800"/>
      <RFC5424Layout enterpriseNumber="18060" includeMDC="true" appName="MyApp"/>
      <Property name="keyProvider">MySecretProvider</Property>
    </Flume>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="eventLogger"/>
    </Root>
  </Loggers>
</Configuration>

显示公开的功能。但是由你来分析内容。例如:

dumpbin /exports Test0221-5.dll 

因此,在上面,您可以看到函数4.该名称对应一个符号,因此它可能是一个名为Dump of file Test0221-5.dll File Type: DLL Section contains the following exports for Test0221-5.dll 00000000 characteristics 555E19D5 time date stamp Thu May 21 19:45:57 2015 0.00 version 1 ordinal base 4 number of functions 4 number of names ordinal hint RVA name 1 0 000113E3 ??0Btest@@QAE@XZ = @ILT+990(??0Btest@@QAE@XZ) 2 1 000112CB ??1Btest@@QAE@XZ = @ILT+710(??1Btest@@QAE@XZ) 3 2 00011028 ?MemberFunc@A@@UAEXXZ = @ILT+35(?MemberFunc@A@@UAEXXZ) 4 3 00011244 createInstance = @ILT+575(_createInstance) Summary 1000 .data 1000 .idata 3000 .rdata 1000 .reloc 1000 .rsrc C000 .text 10000 .textbss 的{​​{1}}函数。但是你无法找到关于它的参数或它的返回类型的更多信息。

功能1到3更具表现力。它看起来像一个函数名称,但名称中有extern "C" createInstance()和其他奇怪的字符。这些是“mangled”C ++名称。名称的重整取决于编译器。

MSVC有一个工具?

@

您可以逐个符号来称呼它。幸运的是,有一个更方便的选择:http://demangler.com/。您可以复制受损名称的完整列表(MSVC或GCC)并在浏览器中将其过去,以找出我们的示例:

undname

所以你得到了funcion的类,如果它是虚拟的,是否是静态的,返回类型,调用约定和每个参数的类型。

也许这可以帮助你,但正如你所看到的那样,它是手工制作的,并且不能完整。您没有看到例如类继承和非导出成员。