程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 如何用dumpbin.exe檢查編譯器生成的托管模塊所嵌入的信息,dumpbin.exe編譯器

如何用dumpbin.exe檢查編譯器生成的托管模塊所嵌入的信息,dumpbin.exe編譯器

編輯:C#入門知識

如何用dumpbin.exe檢查編譯器生成的托管模塊所嵌入的信息,dumpbin.exe編譯器


  • 開啟CMD
  • 運行到dumpbin目錄下:D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
  • 運行命令VCVARS32.BAT,配置環境

    如果不運行vcvars32.bat,會出現如下提示:

  • 運行dumpbin命令

       

    D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin>dumpbin /exports E:\

    DSTCode\Web\DSTWeb\bin\DSTWeb.dll

    Microsoft (R) COFF/PE Dumper Version 12.00.21005.1

    Copyright (C) Microsoft Corporation. All rights reserved.

       

       

    Dump of file E:\DSTCode\Web\DSTWeb\bin\DSTWeb.dll

       

    File Type: DLL

       

    Summary

       

    2000 .reloc

    2000 .rsrc

    1A0000 .text

       

    D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin>

       

  • dumpbin 命令語法及Option:

    dumpbin [options] files…

       

#

Option

Remark

1

/ALL

此選項顯示除代碼反匯編外的所有可用信息。使用 /DISASM 顯示反匯編。可以與 /ALL 一起使用 /RAWDATA:NONE 來省略文件的原始二進制詳細資料。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

2

/ARCHIVEMEMBERS

此選項顯示有關庫成員對象的最少信息。

只有 /HEADERS DUMPBIN選項可用於由 /GL 編譯器選項產生的文件。

3

/CLRHEADER file

用 /clr 生成的圖像文件。

備注

CLRHEADER 顯示有關在任何托管程序中使用的 .NET 頭的信息。輸出顯示 .NET 頭及其中各節的位置和大小(以字節計)。

File Format Spec.doc 描述 .NET 頭中的信息。NET SDK 將 File Format Spec.doc 安裝在 Tools Developers Guide 目錄中。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

4

/DIRECTIVES

此選項轉儲圖像中由編譯器生成的 .directive 節。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

5

/DEPENDENTS

轉儲圖像從中導入函數的 DLL 的名稱。不要轉儲導入函數名。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

6

/DISASM

此選項顯示代碼段的反匯編,如果出現在文件中則使用符號。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

7

/EXPORTS

此選項顯示從可執行文件或 DLL 導出的所有定義。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

8

/FPO

此選項顯示框架指針優化 (FPO) 記錄。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

9

/HEADERS

此選項顯示文件頭和每節的頭。當用於庫時,顯示每個成員對象的頭。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

10

/IMPORTS[:file]

此選項顯示導入到可執行文件或 DLL 的 DLL 列表(靜態鏈接的和延遲加載)和上述每個 DLL 的各個導入。

可選 file 規范允許指定僅顯示某個 DLL 的導入。

例如:

dumpbin /IMPORTS:msvcrt.dll

此選項顯示的輸出與 /EXPORTS 輸出相似。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

11

/LINENUMBERS

此選項顯示 COFF 行號。如果對象文件是用程序數據庫 (/Zi)、C7 兼容 (/Z7) 或僅限行號 (/Zd) 編譯的,則它包含行號。如果可執行文件或 DLL 是與生成調試信息 (/DEBUG) 鏈接的,則它包含 COFF 行號。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

12

/LINKERMEMBER[:{1|2}]

此選項顯示庫中定義的公共符號。指定參數 1 將按對象順序顯示符號及其偏移量。指定參數 2 將顯示對象的偏移量和索引號,然後按字母順序列出這些符號及每個符號的對象索引。若要兩個輸出都獲得,指定不帶數字參數的 /LINKERMEMBER。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

13

/LOADCONFIG

此選項轉儲 IMAGE_LOAD_CONFIG_DIRECTORY 結構,此結構是由 Windows NT 加載程序使用並在 WINNT.H 中定義的可選結構。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

14

/OUT:filename

此選項指定輸出的 filename。默認情況下,DUMPBIN 將信息顯示到標准輸出。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

15

/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 編譯器選項產生的文件。

16

/RAWDATA[:{1|2|4|8|NONE[,number]]

此選項顯示文件中每節的原始內容。參數控制顯示格式,如下所示:

參數 結果

1 默認值。內容以十六進制字節顯示,如果內容具有打印的表示形式,則還顯示為 ASCII 字符。

2 內容顯示為十六進制的 2 字節值。

4 內容顯示為十六進制的 4 字節值。

8 內容顯示為十六進制的 8 字節值。

NONE 取消顯示原始數據。此參數對控制 /ALL 輸出很有用。

Number 顯示的行被設置為每行具有 number 個值的寬度。

   

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

17

/RELOCATIONS

此選項顯示對象或圖像中的任何重定位。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

18

/SECTION:section

此選項限制與指定的 section 有關的信息的輸出。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

19

/SUMMARY

此選項顯示有關節的最少信息(包括總大小)。如果未指定其他選項,則此選項為默認值。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

20

/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 編譯器選項產生的文件。

21

/UNWINDINFO

在程序圖像(例如 exe 和 dll)中轉儲結構化異常處理 (SEH) 表的展開描述符。/UNWINDINFO 僅適用於 IA64 圖像。

只有 /HEADERS DUMPBIN 選項可用於由 /GL 編譯器選項產生的文件。

 


怎查看C程序編譯後生成的匯編語言?

MS VC++ 帶有 DUMPBIN.EXE 可以試試,看看能不能滿足你的需要.

用法: DUMPBIN [選項] [文件]

選項:

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

例: DUMPBIN /DISASM abc.exe
 

下列哪個類是由編譯器自動生成對象的特殊類,是用於類操作?

“Microsoft .NET Framework”是支持生成和運行下一代應用程序和 XML Web Services 的內部 Windows 組件。.NET Framework 旨在實現下列目標: 提供一個一致的面向對象的編程環境,而無論對象代碼是在本地存儲和執行,還是在本地執行但在 Internet 上分布,或者是在遠程執行的。
提供一個將軟件部署和版本控制沖突最小化的代碼執行環境。
提供一個可提高代碼(包括由未知的或不完全受信任的第三方創建的代碼)執行安全性的代碼執行環境。
提供一個可消除腳本環境或解釋環境的性能問題的代碼執行環境。
使開發人員的經驗在面對類型大不相同的應用程序(如基於 Windows 的應用程序和基於 Web 的應用程序)時保持一致。
按照工業標准生成所有通信,以確保基於 .NET Framework 的代碼可與任何其他代碼集成。
Microsoft.NET Framework 具有兩個主要組件:公共語言運行庫和 .NET Framework 類庫。公共語言運行庫是 .NET Framework 的基礎。您可以將運行庫看作一個在執行時管理代碼的代理,它提供內存管理、線程管理和遠程處理等核心服務,並且還強制實施嚴格的類型安全以及可提高安全性和可靠性的其他形式的代碼准確性。事實上,代碼管理的概念是運行庫的基本原則。以運行庫為目標的代碼稱為托管代碼,而不以運行庫為目標的代碼稱為非托管代碼。.NET Framework 的另一個主要組件是類庫,它是一個綜合性的面向對象的可重用類型集合,您可以使用它開發多種應用程序,這些應用程序包括傳統的命令行或圖形用戶界面 (GUI) 應用程序,也包括基於 ASP.NET 所提供的最新創新的應用程序(如 Web 窗體和 XML Web Services)。
Microsoft.NET Framework 可由非托管組件承載,這些組件將公共語言運行庫加載到它們的進程中並啟動托管代碼的執行,從而創建一個可以同時利用托管和非托管功能的軟件環境。.NET Framework 不但提供若干個運行庫宿主,而且還支持第三方運行庫宿主的開發。
例如,ASP.NET 承載運行庫以為托管代碼提供可伸縮的服務器端環境。ASP.NET 直接使用運行庫以啟用 ASP.NET 應用程序和 XML Web Services(本主題稍後將對這兩者進行討論)。
Internet Explorer 是承載運行庫(以 MIME 類型擴展的形式)的非托管應用程序的一個示例。使用 Internet Explorer 承載運行庫使您能夠在 HTML 文檔中嵌入托管組件或 Windows 窗體控件。以這種方式承載運行庫使得托管移動代碼(類似於 Microsoft? ActiveX? 控件)成為可能,不過它需要進行重大改進(如不完全受信任的執行和獨立的文件存儲),而這種改進只有托管代碼才能提供。
下面的插圖顯示公共語言運行庫和類庫與應用程序之間以及與整個系統之間的關系。該插圖還顯示托管代碼如何在更大的結構內運行。
Microsoft.NET Framework 環境:
下面的章節將更加詳細地描述Microsoft .NET Framework 的主要組件和功能。
公共語言運行庫的功能。公共語言運行庫管理內存、線程執行、代碼執行、代碼安全驗證、編譯以及其他系統服務。這些功能是在公共語言運行庫上運行的托管代碼所固有的。 至於安全性,取決於包括托管組件的來源(如 Internet、企業網絡或本地計算機)在內的一些因素,托管組件被賦予......余下全文>>
 

  1. 上一頁:
  2. 下一頁: