DLL查看相關工具_以及相關注意事項

一.       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時,可以用DUMPBINEXE來得到某個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)

查看調用DLLEXE文件是否加載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.hIMAGE_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 編譯器選項產生的文件。

 
發佈了11 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章