1. 程式人生 > >關於DLL調試的兩個工具(dependency walker和dumpbin.exe)

關於DLL調試的兩個工具(dependency walker和dumpbin.exe)

AR all 自帶 調用 csdn arp pre ref 右上角

Dependency Walker工具:

該工具用來查看dll依賴庫和依賴庫內的函數。

左上角:模塊依賴樹,表示該dll所依賴的其它dll文件

右上角:導入函數,即與當前根模塊有關系的函數(即根模塊或根模塊的子模塊使用到的模塊)

右中間:導出函數,即當前模塊所有可以導出的函數(即可以被外界調用的函數)。

下面:模塊列表視圖,用於顯示所依賴的dll模塊的信息,如果加載錯誤會紅色標出

最下面:日誌視圖,顯示出錯模塊的信息

具體查看:如何使用查看DLL神器DependencyWalker

另一篇文章生動的講解了dll原理和作用,主要觀點:

1.dll可以包含圖片,音頻等各種資源(這是超過我的想象的);

2.哪些dll需要註冊,哪些不需要;(打開dependcy查看,有HRESULT DllRegisterServer(void)和DllUnRegisterServer(void)函數的dll必須註冊才能使用)

3.如何註冊dll.(方法一:regsvr32.exe:註冊命令:regsvr32 xx.dll;註銷命令:regsvr32 /u xx.dll;方法二:程序內調用函數註冊:LoadLibrary("xx.dll"),FARPROC pFun=GetProcAddress(hModule,"DllRegisterServer"))

4.一些windows自帶dll的具體作用。

具體查看:Dependency Walker使用說明

dumpbin.exe工具:

該工具與上述工具類似,只不過沒有窗口只有命令。

dumpbin.exe是vs2010自帶工具,用的時候將它添加到環境變量中可以方便使用。

它的優點是可以查看多種類型文件:.obj文件、.lib庫、.dll庫、.exe執行文件。而Dependcy只能查看dll和exe文件。

如果查看a.dll庫中包含哪些函數,可以使用:dumpbin /exports a.dll >1.txt

如果查看b.exe中加載了哪些動態庫,可以使用:dumpbin /imports b.exe >2.txt

如果查看c.lib中包含哪些函數,可以使用:dumpbin /all /rawdata:none c.lib >3.txt

如果查看d.obj中包含哪些函數,可以使用:dumpbin /all /rawdata:none d.obj >4.txt

關於DLL調試的兩個工具(dependency walker和dumpbin.exe)