關於DLL調試的兩個工具(dependency walker和dumpbin.exe)
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)