DLL/EXE查看工具Dumpbin
一般情况下,我们需要查看一个DLL或EXE中的包含的函数或是依赖的函数之类的信息,可以使用VS自带的工具dumpbin;
可以直接在命令行下输入dumpbin就可以查看他的使用说明,如果未显示,可以先运行VS安装目录下的vcvarsall.bat来设置一下环境变量就可以了。
- Microsoft Windows XP [版本 5.1.2600]
- (C) 版权所有 1985-2001 Microsoft Corp.
- C:/Documents and Settings/Administrator>”D:/Program Files/Microsoft Visual Studi
- o 9.0/VC/vcvarsall.bat”
- Setting environment for using Microsoft Visual Studio 2008 x86 tools.
- C:/Documents and Settings/Administrator>dumpbin
- Microsoft (R) COFF/PE Dumper Version 9.00.21022.08
- Copyright (C) Microsoft Corporation. All rights reserved.
- 用法: DUMPBIN [选项] [文件]
- 选项:
- /ALL
- /ARCHIVEMEMBERS
- /CLRHEADER
- /DEPENDENTS
- /DIRECTIVES
- /DISASM[:{BYTES|NOBYTES}]
- /ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}
- /EXPORTS
- /FPO
- /HEADERS
- /IMPORTS[:文件名]
- /LINENUMBERS
- /LINKERMEMBER[:{1|2}]
- /LOADCONFIG
- /OUT:文件名
- /PDATA
- /PDBPATH[:VERBOSE]
- /RANGE:vaMin[,vaMax]
- /RAWDATA[:{NONE|1|2|4|8}[,#]]
- /RELOCATIONS
- /SECTION:名称
- /SUMMARY
- /SYMBOLS
- /TLS
- /UNWINDINFO
- C:/Documents and Settings/Administrator>
DUMPBIN 选项
/ALL
显示除代码反汇编外的所有可用信息。使用 /DISASM 显示反汇编。可以与 /ALL 一起使用 /RAWDATA :NONE 来省略文件的原始二进制详细资料。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/ARCHIVEMEMBERS
显示有关库成员对象的最少信息。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/CLRHEADER file
此处: file 用 /clr 生成的图像文件。
备注
CLRHEADER 显示有关在任何托管程序中使用的 .NET 头的信息。输出显示 .NET 头及其中各节的位置和大小(以字节计)。
File Format Spec.doc 描述 .NET 头中的信息。NET SDK 将 File Format Spec.doc 安装在 Tools Developers Guide 目录中。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/DIRECTIVES
转储图像中由编译器生成的 .directive 节。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/DEPENDENTS
转储图像从中导入函数的 DLL 的名称。不要转储导入函数名。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/DISASM
显示代码段的反汇编,如果出现在文件中则使用符号。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/EXPORTS
显示从可执行文件或 DLL 导出的所有定义。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/FPO
显示框架指针优化 (FPO) 记录。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/HEADERS
显示文件头和每节的头。当用于库时,显示每个成员对象的头。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/IMPORTS[:file ]
显示导入到可执行文件或 DLL 的 DLL 列表(静态链接的和延迟加载 )和上述每个 DLL 的各个导入。
可选 file 规范允许指定仅显示某个 DLL 的导入。例如:
dumpbin /IMPORTS:msvcrt.dll
显示的输出与 /EXPORTS 输出相似。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/LINENUMBERS
显示 COFF 行号。如果对象文件是用程序数据库 (/Zi)、C7 兼容 (/Z7) 或仅限行号 (/Zd) 编译的,则它包含行号。如果可执行文件或 DLL 是与生成调试信息 (/DEBUG) 链接的,则它包含 COFF 行号。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/LINKERMEMBER[:{1|2}]
显示库中定义的公共符号。指定参数 1 将按对象顺序显示符号及其偏移量。指定参数 2 将显示对象的偏移量和索引号,然后按字母顺序列出这些符号及每个符号的对象索引。若要两个输出都获得,指定不带数字参数的 /LINKERMEMBER。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/LOADCONFIG
转储 IMAGE_LOAD_CONFIG_DIRECTORY 结构,此结构是由 Windows NT 加载程序使用并在 WINNT.H 中定义的可选结构。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/OUT:filename
指定输出的 filename 。默认情 况下,DUMPBIN 将信息显示到标准输出。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/PDBPATH[:VERBOSE] filename
此处: filename 要为其查找匹配 .pdb 文件的 .dll 或 .exe 文件名。
VERBOSE(可选)
报告曾尝试在其中定位 .pdb 文件的所有目录。
补充:
/PDBPATH 将沿调试器搜索 .pdb 文件的同一路径搜索计算机,并将报告哪些 .pdb 文件(若有)和 filename 中指定的文件相对应。
使用 Visual Studio 调试器时可能会遇到问题,这是因为调试器对调试文件的不同版本使用 .pdb 文件。
/PDBPATH 将沿下列路径搜索 .pdb 文件:
- 检查可执行文件驻留的位置。
- 检查写入可执行文件的 PDB 的位置。这通常是图像被链接时的位置。
- 沿 Visual Studio IDE 中配置的搜索路径检查。
- 沿 _NT_SYMBOL_PATH 和 _NT_ALT_SYMBOL_PATH 环境变量中的路径检查。
- 在 Windows 目录中检查。
/PDATA
仅用于 RISC 处理器。
此选项从图像或对象转储异常表 (.pdata)。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/RAWDATA[:{1|2|4|8|NONE[, number ]]
此选项显示文件中每节的原始内容。参数控制显示格式,如下所示:
参数 |
结果 |
1 |
默认值。内容以十六进制字节显 示,如果内容具有打印的表示形式,则还显示为 ASCII 字符。 |
2 |
内容显示为十六进制的 2 字节值。 |
4 |
内容显示为十六进制的 4 字节值。 |
8 |
内容显示为十六进制的 8 字节值。 |
NONE |
取消显示原始数据。此参数对控制 /ALL 输出很有用。 |
Number |
显示的行被设置为每行具有 number 个值的宽度。 |
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/RELOCATIONS
此选项显示对象或图像中的任何重定位。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/SECTION:section
此选项限制与指定的 section 有关的信息的输出。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/SUMMARY
此选项显示有关节的最少信息(包括总大小)。如果未指定其他选项,则此选项为默认值。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/SYMBOLS
此选项显示 COFF 符号表。符号表存在于所有对象文件中。而对于图像文件,只有当它是与 /DEBUG 链接的时,它才包含 COFF 符号表。
可以通过查阅 winnt.h(IMAGE_SYMBOL 和 IMAGE_AUX_SYMBOL)或 COFF 文档,可找到有关 /SYMBOLS 输出含义的附加信息。
- C:/Documents and Settings/Administrator>dumpbin -exports E:/WorkStation/CPD项目/程序/UpdataModule/UpdataLibSrv/Results/UpdataLibSrv.dll
- Microsoft (R) COFF/PE Dumper Version 9.00.21022.08
- Copyright (C) Microsoft Corporation. All rights reserved.
- Dump of file E:/WorkStation/CPD项目/程序/UpdataModule/UpdataLibSrv/Results/UpdataLibSrv.dll
- File Type: DLL
- Section contains the following exports for UpdataLibSrv.dll
- 00000000 characteristics
- 4C2C0DC3 time date stamp Thu Jul 01 11:38:43 2010
- 0.00 version
- 1 ordinal base
- 1 number of functions
- 1 number of names
- ordinal hint RVA name
- 1 0 00011005 Add = @ILT+0(?Add@@YGHHH@Z)
- Summary
- 1000 .data
- 1000 .idata
- 2000 .rdata
- 1000 .reloc
- 1000 .rsrc
- 4000 .text
- 10000 .textbss
- C:/Documents and Settings/Administrator>
其中,这一部分为我们重点需要的部分:
- ordinal hint RVA name
- 1 0 00011005 Add = @ILT+0(?Add@@YGHHH@Z)
这个Add就是我们的DLL中导出的函数名,而且可以看出,我的DLL是使用标准调用的方式导出的.
- C:/Documents and Settings/Administrator>dumpbin -imports E:/WorkStation/CPD项目/
- 程序/UpdataModule/UpdataLibSrv/Results/UpdataLibSr
- v.dll
- Microsoft (R) COFF/PE Dumper Version 9.00.21022.08
- Copyright (C) Microsoft Corporation. All rights reserved.
- Dump of file E:/WorkStation/CPD项目/程序/UpdataModule/UpdataLibSrv/Results/UpdataLibSrv.dll
- File Type: DLL
- Section contains the following imports:
- MSVCR90D.dll
- 10018218 Import Address Table
- 100180E8 Import Name Table
- 0 time date stamp
- 0 Index of first forwarder reference
- 17F _crt_debugger_hook
- 1A8 _except_handler4_common
- 358 _onexit
- 2B0 _lock
- BA __dllonexit
- 424 _unlock
- B0 __clean_type_info_names_internal
- 8E __CppXcptFilter
- 132 _adjust_fdiv
- 144 _amsg_exit
- 240 _initterm_e
- 23F _initterm
- 72 _CrtSetCheckCount
- 194 _decode_pointer
- 1A0 _encoded_null
- 1DB _free_dbg
- 2C2 _malloc_dbg
- 19F _encode_pointer
- 5C _CRT_RTC_INITW
- KERNEL32.dll
- 1001816C Import Address Table
- 1001803C Import Name Table
- 0 time date stamp
- 0 Index of first forwarder reference
- 266 GetTickCount
- 415 SetUnhandledExceptionFilter
- 43E UnhandledExceptionFilter
- 1A9 GetCurrentProcess
- 42D TerminateProcess
- 14C FreeLibrary
- 45C VirtualQuery
- 1F5 GetModuleFileNameW
- 223 GetProcessHeap
- 29D HeapAlloc
- 2A1 HeapFree
- 2F1 LoadLibraryA
- 220 GetProcAddress
- 4B5 lstrlenA
- 31A MultiByteToWideChar
- 47A WideCharToMultiByte
- B4 DebugBreak
- 35A RaiseException
- 2D1 IsDebuggerPresent
- CB DisableThreadLibraryCalls
- 2BD InterlockedExchange
- 421 Sleep
- 2BA InterlockedCompareExchange
- 354 QueryPerformanceCounter
- 1AD GetCurrentThreadId
- 1AA GetCurrentProcessId
- 24F GetSystemTimeAsFileTime
- Summary
- 1000 .data
- 1000 .idata
- 2000 .rdata
- 1000 .reloc
- 1000 .rsrc
- 4000 .text
- 10000 .textbss
可以看到我们的DLL中依赖的其他资源或是DLL中包含的函数,资源信息。