[C++] 如何查看DLL中包含了哪些函数

9 篇文章 0 订阅
2 篇文章 0 订阅

什么是DLL?

DLL(动态链接库)是一种可执行文件格式,它包含了一些可以被多个程序共享的代码和数据。当一个程序需要使用某个DLL中的函数或类时,操作系统会将该DLL加载到内存中,并在程序运行时将其链接到程序的地址空间中。这样,程序就可以通过调用DLL中的函数或访问其数据来实现特定的功能。

为什么需要查看DLL中函数?

在以下情况下,需要查看DLL(动态链接库)中的函数:

  1. 查看自定义的DLL是否正常导出了需要暴露给调用者的函数清单。
  2. 当你需要使用某个特定功能或类库时,而这个功能或类库是由DLL提供的。
  3. 当你在使用某个软件或应用程序时,发现它依赖于一个特定的DLL,以实现某些功能。
  4. 当你在使用某个开发工具(如Visual Studio)进行编程时,需要调用DLL中的函数来完成某个任务。
  5. 当你在使用某个操作系统(如Windows)时,需要调用DLL中的函数来实现某些系统级别的操作。

通过 Dependency Walker来查看

Dependency Walker (depends.exe) Home Page

http://www.dependencywalker.com/depends22_x64.zip

下载完成,进行解压,通过“depends.exe”打开软件:

该软件只支持到Windows 8,不支持Windows 10。在 Win10 下使用 Dependency Walker 分析任何 DLL 都会进入未响应的状态。

通过Dependencies来查看

https://github.com/lucasg/Dependencies

该自由软件是“Dependency Walker”的替代者。 

https://github.com/lucasg/Dependencies/releases/download/v1.11.1/Dependencies_x64_Release.zip

 下面是打开“C:\Windows\System32\msvcrt.dll”的截图:

 下面是打开自定义动态连接库“D:\my_project\VCXXTutorials\PyCallDLL\MathLibrary\x64\Debug\MathLi
brary.dll”的截图:

通过Visual Studio自带的dumpbin命令查看

Microsoft COFF 二进制文件转储程序 (DUMPBIN.EXE) 显示有关通用对象文件格式 (COFF) 二进制文件的信息。 你可以使用 DUMPBIN 检查 COFF 对象文件、COFF 对象的标准库、可执行文件和动态链接库 (DLL)。

DUMPBIN 参考 | Microsoft Learn

dumpbin位于VC的安装路径下,比如“D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\bin\Hostx86\x64”中。

打开命令行窗口,输入“cd /d D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\bin\Hostx86\x64”,然后输入“dumpbin.exe /?”查看该命令的使用帮助。

输入“dumpbin.exe /exports D:\my_project\VCXXTutorials\PyCallDLL\MathLibrary\x64\Debug\MathLi
brary.dll”命令即可查看自定义的Dll中的函数:

D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\bin\Hostx86\x64>dumpbin.exe /exports D:\my_project\VCXXTutorials\PyCallDLL\MathLibrary\x64\Debug\MathLi
brary.dll
Microsoft (R) COFF/PE Dumper Version 14.36.32537.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file D:\my_project\VCXXTutorials\PyCallDLL\MathLibrary\x64\Debug\MathLibrary.dll

File Type: DLL

  Section contains the following exports for MathLibrary.dll

    00000000 characteristics
    FFFFFFFF time date stamp
        0.00 version
           1 ordinal base
           4 number of functions
           4 number of names

    ordinal hint RVA      name

          1    0 0001100A fibonacci_current = @ILT+5(fibonacci_current)
          2    1 000112DF fibonacci_index = @ILT+730(fibonacci_index)
          3    2 00011244 fibonacci_init = @ILT+575(fibonacci_init)
          4    3 0001129E fibonacci_next = @ILT+665(fibonacci_next)

  Summary

        1000 .00cfg
        1000 .data
        1000 .idata
        1000 .msvcjmc
        3000 .pdata
        3000 .rdata
        1000 .reloc
        1000 .rsrc
        8000 .text
       10000 .textbss

其中:

    ordinal hint RVA      name

          1    0 0001100A fibonacci_current = @ILT+5(fibonacci_current)
          2    1 000112DF fibonacci_index = @ILT+730(fibonacci_index)
          3    2 00011244 fibonacci_init = @ILT+575(fibonacci_init)
          4    3 0001129E fibonacci_next = @ILT+665(fibonacci_next)

就是该dll中可以导出的函数列表。

通过“dumpbin.exe /EXPORTS C:\Windows\System32\msvcrt.dll” 查看系统dll的函数:

通过“dumpbin.exe /EXPORTS C:\Windows\System32\msvcrt.dll > D:/msvcrt.dll.exports.txt” 把结果输出到文本文件。

  • 40
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DLL函数查看器是一款DLL函数查看工具,直接把DLL文件拖入列表查看即可。 1.将本程序快捷方式放入系统 "SendTo" 目录后,就可以右键文件"发送到"实现文件快速查看 2.按粘帖键(Ctrl+V)将剪辑板字符串在列表匹配查找 3.关于参数量的问题,由于猜解方法过于简单对于部分函数未从当前函数返回,而是"JMP"到别的函数 所以猜解可能会有错误,需要结合已知函数库或反汇编查看,另此方法对于cdecl调用函数无效 4.关于反汇编视图的"到首返回"如果勾选即表示仅反汇编到头一个RETN为止,否者将按照"DisAsm_MaxLine" 所指定的行数.生效方法参见说明细则12~13. 5.将PEID userdb.txt 放置到程序目录下可以实现查壳 6.如果将易语言API伴侣DATA下文件复制到本目录,可获得已知函数信息.这首先要感谢API伴侣的作者 7.在目录下建立 "ViewApi.cfg" ,设置信息将写入配置文件可方便放入优盘等移动存储器使用 程序启动时会优先读取配置文件,如果文件不纯在则会访问注册表 8.如果你觉得这个美化窗口很浪费资源,可以打开注册表修改如下项值即可关闭 [HKEY_CURRENT_USER\Software\ViewApiList] "UI"=dword:00000000 9.如果你觉得反汇编影响了效率,可以打开注册表修改如下项值即可关闭 [HKEY_CURRENT_USER\Software\ViewApiList] "DisAsm"=dword:00000000 10.如果想关闭查壳功能可以删除userdb.txt或注册表如下设置 [HKEY_CURRENT_USER\Software\ViewApiList] "CheckShell"=dword:00000000 11.在线查询接口可在注册表如下位置修改,{searchTerms}为保留关键字被作为替换函数名 [HKEY_CURRENT_USER\Software\ViewApiList] "WebSearch"="http://www.baidu.com/s?wd={searchTerms}&ie=utf-8" 12.是否仅反汇编到头一个返回,1.表示是,0表示否 [HKEY_CURRENT_USER\Software\ViewApiList] "DisAsm_Retn"=dword:00000001 13.反汇编最大行数,即表示当前地址向后的长度,与函数实际长度无关.是否生效需要根据"DisAsm_Retn"设置 [HKEY_CURRENT_USER\Software\ViewApiList] "DisAsm_MaxLine"=dword:000003e8 键盘快捷键说明: TAB(SHIFT+TAB) -- 视图焦点切换 CTRL+S -- 视图切换 CTRL+F -- 文字搜索 F3 -- 搜索下一个 CTRL+A -- 项目全选 CTRL+C -- 复制选项目函数名称/汇编代码 CTRL+V -- 将剪辑板的字符在视图匹配搜索 ALT+← -- 反汇编视图上一次跳转的后退 ALT+→ -- ... 前进 Application -- 弹出右键菜单(右WIN键和右CTRL键间的那个键)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老狼IT工作室

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值