• DLL查看相关工具_以及相关注意事项


    转自:http://blog.csdn.net/dengrk/article/details/1937430

    一.       DUMPBIN 命令行

    Microsoft COFF 二进制文件转储器 (DUMPBIN.EXE) 显示有关 32 位通用对象文件格式 (COFF) 二进制文件的信息。可以使用 DUMPBIN 检查 COFF 对象文件、标准 COFF 对象库、可执行文件和动态链接库 (DLL)。(在VC Studio 目录下有dumpbin.exe工具,环境配置文件路径:visual Studio/VC98/Bin/VCVARS32.BAT,可放到命令提示符下运行。执行后,在其它的命令提示符下可执行dumpbin.exe命令了。)

    注意   DUMPBIN 仅从命令行运行。

    在使用VC时,可以用DUMPBIN。EXE来得到某个DLL中所输出的符号的清单。如下面的命令:dumpbin -exports Cmpnt1.dll
    如:
    C:/WINDOWS/system32>dumpbin -exports msgsvc.dll
    Microsoft (R) COFF Binary File Dumper Version 6.00.8447
    Copyright (C) Microsoft Corp 1992-1998. All rights reserved.


    Dump of file msgsvc.dll

    File Type: DLL

      Section contains the following exports for msgsvc.dll

               0 characteristics
        41107F60 time date stamp Wed Aug 04 14:17:04 2004
            0.00 version
               1 ordinal base
               2 number of functions
               2 number of names

        ordinal hint RVA      name

              1    0 00004ABF ServiceMain
              2    1 00004595 SvchostPushServiceGlobals

      Summary

            1000 .data
            1000 .reloc
            1000 .rsrc
            8000 .text

    C:/>dumpbin
    Microsoft (R) COFF Binary File Dumper Version 6.00.844
    Copyright (C) Microsoft Corp 1992-1998. All rights res

    usage: DUMPBIN [options] [files]

       options:

          /ALL
          /ARCH
          /ARCHIVEMEMBERS
          /DEPENDENTS
          /DIRECTIVES
          /DISASM
          /EXPORTS
          /FPO
          /HEADERS
          /IMPORTS
          /LINENUMBERS
          /LINKERMEMBER[:{1|2}]
          /LOADCONFIG
          /OUT:filename
          /PDATA
          /RAWDATA[:{NONE|BYTES|SHORTS|LONGS}[,#]]
          /RELOCATIONS
          /SECTION:name
          /SUMMARY
          /SYMBOLS

    若要运行 DUMPBIN,请使用下列语法:

    DUMPBIN [options] files...

    指定一个或多个二进制文件,以及控制信息所需的任何选项。DUMPBIN 将该信息显示到标准输出。可以将输出重定向到文件,或者使用 /OUT 选项为输出指定文件名。

    当在文件上运行 DUMPBIN 但未指定选项时,DUMPBIN 显示 /SUMMARY 输出。

    当键入命令 dumpbin 但没有任何其他命令行输入时,DUMPBIN 显示汇总其选项的用法语句。

    DUMPBIN 选项

    C:/demo>dumpbin -exports kk_richedit.dll(命令提示符下,点击右键,选择标记,选择文本之后,在点击右键,就把文本粘贴上了)

    显示如下信息:

    1    0 00001096 ??0KK_RichEdit@@QAE@ABV0@@Z

     2    1 0000115E ??0KK_RichEdit@@QAE@XZ

     3    2 000010E6 ??1KK_RichEdit@@UAE@XZ

     4    3 000011D6 ??4KK_RichEdit@@QAEAAV0@ABV0@@Z

     5    4 0003B038 ??_7KK_RichEdit@@6B@

    前面数字是导出函数序号,后边的数字表示提示码,导出的DLL函数名字。C++为了支持函数的重载,在编译时,对函数名字进行了改编,(也叫名字粉碎)。

    如果希望名字在编译时不要进行改编,可以在声明前加上extern “C”必须是大写的C。整个名字可以写成:

    #define RICHEDIT_API extern “C” _declspec(dllexport)

    extern “C”,不能够导出类的成员函数,只能够导出全局函数,让全局函数不发生名字改编。

    另外,如果调用约定改变了,那么即使使用 extern  “C”也没有作用。例如:函数名字前面加上__stdcall,函数名字仍然会发生名字改编。

    解决名字改编的问题:(模块定义文件.def)

    LIBRARY DLLNAME

    EXPORTS ;用法可输入到MSDN中,查看帮助

    动态链接库的加载LoadLibrary不仅可加载DLL程序,还可以加载EXE程序。GetProcAdress()可以得到导出函数的指针。

    动态加载不需要头文件,也不需要lib文件,只要DLL文件就可以了。

    注意:动态链接库导出的调用约定是什么,在使用时也要声明成相同的调用约定,例如:typedef int (__stdcall *ADDPROC)(int a,int b)

    查看调用DLL的EXE文件是否加载DLL模块。

    可以用dumpbin –imports name.exe可以看到没有DLL文件,因为是动态加载,所以看不到了。

    GetProcAdress()中也可以通过序号调用函数MAKEINTRESOURCE()
    ADDPROC ADD=(ADDPROC)GetProcAddress(hInst, MAKEINTRESOURCE(1));调用序号为1的函数。
    什么情况下需要用到DLLMAIN()函数,
    如果有些函数需要使用DLL的句柄,可以用传到DLLMAIN()的参数进行调用。
     

    二.          Depends工具,VC工具里可找到,不仅可以打开EXE文件,也可以打开DLL文件,查看其导出函数。

    代码:extern int add(); 改为 _declspec(dllimport)来引入函数。

    不同之处是,用_declspec(dllimport)声明时,告诉编译器函数是从动态链接库中引入的,编译器编译的代码就会比较优化的。

    GetForegroundWindow

    The GetForegroundWindow function returns a handle to the foreground window (the window with which the user is currently working). The system assigns a slightly higher priority to the thread that creates the foreground window than it does to other threads.

    API函数可以得到DLL调用者的窗口句柄。

    DLL使用API函数需要加载头文件#include <windows.h>

    C运行库头文件 #include <studio.h>

     

    其他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 符号表。

    下面是关于 /SYMBOLS 输出的说明。通过查阅 winnt.h(IMAGE_SYMBOL 和 IMAGE_AUX_SYMBOL)或 COFF 文档,可找到有关 /SYMBOLS 输出含义的附加信息。

    假设有下列示例转储:

    Dump of file main.obj

    File Type: COFF OBJECT

     

    COFF    SYMBOL    TABLE

    000    00000000   DEBUG      notype      Filename      | .file

          main.cpp

    002   000B1FDB   ABS      notype      Static      | @comp.id

    003   00000000   SECT1      notype      Static      | .drectve

          Section length       26, #relocs   0, #linenums    0, checksum 722C964F

    005   00000000   SECT2      notype      Static      | .text

          Section length      23, #relocs      1, #linenums    0, checksum 459FF65F, selection    1 (pick no duplicates)

    007   00000000   SECT2      notype ()   External      | _main

    008   00000000   UNDEF      notype ()   External      | ?MyDump@@YAXXZ (void __cdecl MyDump(void))

     

    String Table Size = 0x10 bytes

     

    Summary

     

          26 .drectve

          23 .text

    对于以符号号码开头的行,下列说明描述了含有与用户相关的信息的列:

    • 开头的 3 位数字是符号索引/号码。
    • 如果第三列包含 SECTx,则符号在对象文件的那一节中定义。但如果出现 UNDEF,则它不在那个对象中定义并且必须在其他地方被解析。
    • 第五列 (Static, External) 说明符号是否只在那个对象的内部可见,或者是否是公共的(外部可见)。静态符号 _sym 不会链接到公共符号 _sym;这些符号是名为 _sym 的函数的两种不同实例。

    编号行中的最后一列是符号名(修饰名和未修饰名)。

    只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。

    /UNWINDINFO

    在程序图像(例如 exe 和 dll)中转储结构化异常处理 (SEH) 表的展开描述符。/UNWINDINFO 仅适用于 IA64 图像。

    只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。

  • 相关阅读:
    Qt 学习之路 :自定义只读模型
    Qt 学习之路:QSortFilterProxyModel
    Qt 学习之路 :可视化显示数据库数据
    Qt 学习之路 :访问网络(4)
    Qt 学习之路:QFileSystemModel
    高级Bash脚本编程指南
    CGI
    shell学习
    【shell】while read line 与for循环的区别
    管道技巧-while read line
  • 原文地址:https://www.cnblogs.com/wangjixianyun/p/3103544.html
Copyright © 2020-2023  润新知