日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Dependency Walkers来检查exe文件中缺少的dll

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Dependency Walkers来检查exe文件中缺少的dll 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Windows世界中,有無數塊活動的大陸,它們都有一個共同的名字——動態鏈接庫?,F在就讓我們走進這些神奇的活動大陸,找出它們隱藏已久的秘密吧!?

  初窺門徑:Windows的基石?

  隨便打開一個系統目錄,一眼望去就能看到很多擴展名DLL的文件,這些就是經常說的“動態鏈接庫”,DLL是Dynamic Link Library(即“動態鏈接庫”)的縮寫。從Microsoft公司推出首個版本的Windows以來,動態鏈接庫就一直是這個操作系統的基礎。?

  1.看看DLL里有什么?

  與其用晦澀的專業術語來解決DLL是什么,不如先來看看DLL里有什么。DLL和EXE文件一樣,其中包含的也是程序的二進制執行代碼和程序所需的資源(比如圖標、對話框、字符串等),可是為什么要把代碼放在DLL里面,而不是做成EXE呢?其實DLL中的代碼是以API函數形式出現的,通俗地說,DLL中包含的程序代碼都被做成了一個個小模塊,應用程序通過按下所需DLL中特定的按鈕,來調用DLL中這個按鈕所代表的功能。在使用“記事本”等程序時,如果要保存文件或打開文件,就會彈出通用文件對話框,讓我們選擇文件位置。你可知道,這就是調用了系統底層DLL中的通用對話框界面。?

  2.系統中幾個重要的DLL?

  Windows中有3個非常重要的底層DLL:Kernel32.dll、User32.dll、GDI32.dll。其中Kernel32.dll顧名思義就是內核相關的功能,主要包含用于管理內存、進程和線程的函數;而User32.dll中包含的則是用于執行用戶界面任務的函數,比如把用戶的鼠標點擊操作傳遞給窗口,以便窗口根據用戶的點擊來執行預定的事件;GDI32.dll的名稱用了縮寫,全稱是Graphical Device Interface(圖形設備接口),包含用于畫圖和顯示文本的函數,比如要顯示一個程序窗口,就調用了其中的函數來畫這個窗口。?

  3.為什么要用DLL?

  剛才在談到這個問題的時候,我們只是解釋了DLL將程序代碼封裝成函數的原理。為什么封裝成函數,就能成為系統中大量使用DLL的理由呢??

 ?、贁U展應用程序?

  由于DLL能被應用程序動態載入內存。所以,應用程序可以在需要時才將DLL載入到內存中,這讓程序的可維護性變得很高。比如QQ的視頻功能需要升級,那么負責編寫QQ的程序員不必將QQ所有代碼都重寫,只需將視頻功能相關的DLL文件重寫即可。?

 ?、诒阌诔绦騿T合作?

  這個和我們最終用戶關系不大,僅供了解。我們都知道編程工具有很多,比如VB、VC、Delphi等,如果好幾個人合作來編寫一個大的程序,那么可能有的人用VB,有的人用VC,每人負責的部分所使用的編程語言都不同,究竟放在哪個編譯器中進行編譯呢?這就好比一群來自各個國家的人在共同編寫一篇文章,如果他們所使用的語言都不同,寫出來的文章怎么可能湊到一起呢?而有了DLL后,可以讓VC程序員寫一個DLL,然后VB程序員在程序中調用,無需為怎么將它們都編譯為一個單獨的EXE而發愁了。?

  ③節省內存?

  如果多個應用程序調用的是同一個動態鏈接庫,那么這個DLL文件不會被重復多次裝入內存中,而是由這些應用程序共享同一個已載入內存的DLL。就好比一個辦公室中,很少會為每一個員工配置一臺飲水機的,而是在一個公共位置放上一個飲水機,所有需要喝水的職員都可以共用這臺飲水機,降低了成本又節約了空間。?

  ④共享程序資源?

  包括剛才提到過的通用文件對話框在內,DLL文件提供了應用程序間共享資源的可能。資源可以是程序對話框、字符串、圖標,或者聲音文件等。?

 ?、萁鉀Q應用程序本地化問題?

  在下載了某個程序的漢化包后,打開漢化說明,經??梢钥吹接孟螺d包中的DLL文件覆蓋掉程序原來的DLL,漢化就完成了。這些程序都是將執行代碼和應用程序界面分開編寫了,所以漢化者只需簡單地將其中和程序界面相關的DLL漢化并發布即可。?

求知若渴:探究DLL的真相 ?
  誰知道DLL里究竟有多少函數,又有誰知道EXE調用了哪個DLL的哪些函數?其實,這個問題并不難解決。還記不記得本刊2004年第6期的《無間盜IV——盜亦有盜》中介紹的分析EXE文件的工具Dependency Walker(以下簡稱Depends)今天我們要用它當探險工具,把DLL真相探個通通透透。?
   1.看看DLL里有多少函數 ?
  第一步:下載并解壓Depends,運行其中的depends.exe,然后選擇菜單“File→Open”(文件→打開),在文件選擇框中選中需要分析的DLL文件并打開,此處選擇QQ目錄下的QQZip.dll。?
  第二步:在程序左側的樹狀欄中就列出了這個DLL使用了哪些其他DLL的功能函數(原來DLL中還可以調用其他DLL^O^),而右側的兩個分欄列表分別顯示了函數輸入及輸出表,函數輸出表即為該DLL提供給其他EXE或者DLL調用的函數的總列表。?
  第三步:函數輸出表的Function欄中即為輸出函數的名稱(見圖1),在QQZip.dll中共發現了2個函數:Unzip、Zip。因此可以判斷該DLL在QQ程序中負責壓縮和解壓縮的任務。?

   2.審審EXE究竟用了哪個DLL ?
  還是拿QQ來作為例子,在Depends中打開QQ.exe,這時界面左側的樹狀列表中顯示的就是QQ.exe調用的DLL列表(見圖2),如果展開這些DLL分支,還會發現其他的DLL,這就說明QQ調用的這些DLL文件還有可能(幾乎是肯定)再調用別的DLL。這就好比買了一臺新的DVD機,可能其中用的機芯是SONY的,而這個機芯里的一個小電容又有可能是別的公司的,這是同樣的道理。?


3.用DLL看穿EXE真面目 ?
  剛才得到了QQ.exe所使用的DLL列表,其實通過這個列表,還能分析出很多別的信息。比如其中包含MFC42.dll,所以可以判斷QQ.exe是采用VC(即Visual C++)編寫的,而包含WSOCK32.dll則說明這個程序帶有網絡通訊功能(廢話!QQ如果不能網絡通訊還有什么用……)。以下是一個簡表,大家在分析別的EXE時可以根據其所使用的DLL來對其功能進行初步判斷。?
  DLL文件名 可以判斷出的EXE信息?
  MFC42.dll 使用VC5.0/6.0編寫。?
  VBRun*.dll “*”代表數字版本號,使用VB3.0/4.0編寫。?
  MSVBVM50.dll 使用VB5.0編寫,在Windows 98(SE)上自帶該DLL。?
  MSVBVM60.dll 使用VB6.0編寫,在Windows Me/2000/XP等系統上自帶該DLL。?
  ADVAPI32.dll 可能會進行注冊表操作。?
  WSOCK32.dll 具備網絡通訊功能。?
  WS2_32.dll 具備網絡通訊功能。?
  WININET.dll 具備HTTP瀏覽、下載等功能,典型的例子是瀏覽器、下載工具。?
  WINMM.dll 具備多媒體播放能力。?
  DDRAW.dll 游戲、高級圖像處理工具。?
  D3D*.dll 3D游戲,或者動畫處理工具。?
   4.DLL是個大寶庫 ?
  除供應用程序調用函數的DLL外,還有另一種用來保存資源的DLL,比如QQ目錄下的QQRes.dll,用Depends打開后發現沒有任何輸出函數,難道是一個雞肋DLL?可是改用資源工具Resource Hacker(下載地址: http://www.mydown.com/soft/42/42058.html )打開這個DLL后,就發現原來其中保存了這么多QQ的資源,包括圖標、音樂、圖片、字符串、對話框……(見圖3)?


刨根問底:DLL的寓言 ?
  DLL引起的故障是很常見的,為什么會引起故障?遇到故障怎么解決?噓~偷聽一下DLL的對話,你就會明白了。?
   1.從搬運工談接口兼容性 ?
  在Windows工地上,有一個名叫EXE的包工頭,他手下有很多稱為DLL的建筑工人。其中有一個專門負責搬運的DLL(暫且稱為“搬運工A”),每次需要搬運水泥時,包工頭EXE都只要對他喊一聲:“來!搬。”?
  過了一段時間,搬運工A覺得自己的效率太低,于是從原來的每次搬1袋水泥改成了每次搬3袋水泥。改進了搬運方法后,EXE包工頭仍然每次只是喊一聲:“來!搬?!眳s不知搬運工A已經改變了搬運的方法。?
  但又過了一段時間,包工頭EXE把搬運工A給辭退了,從別的工地上找來了另一個DLL(暫且稱為“搬運工B”)。這個搬運工在別的工地的時候,搬運東西特別快,所以包工頭EXE決定把搬運工作給“升級”一下。但真正開始工作時,包工頭才發現出了問題……現在不管叫幾遍“來!搬?!边@個新來的搬運工B都不知道究竟應該搬什么。?
  上面的例子中,搬運工A改進搬運方法,但EXE調用它的方法仍不變,這就是DLL升級的原理,改進了內部的實現方法,但調用接口不變,這樣EXE文件不用跟著升級,就能調用新版本的DLL了。而搬運工B的故事告訴我們,不管新版本的DLL效率多高,如果接口(可以理解為DLL中輸出的函數名)與原來的不一致,那么EXE就不知道也無法調用它了。?
   2.登記身份證的DLL ?
  在系統故障中,有很多都是由于DLL文件沒有注冊造成的,比如Windows XP的壓縮文件夾功能出現故障就很有可能是系統目錄中的zipfldr.dll沒有注冊造成的,這類故障的解決方法也大多是運行如下命令:?
   regsvr32 DLL文件名 ?
  很多人不理解為什么要這么做,是不是所有的DLL都能這樣做呢??
  其實系統中有兩種DLL,一種是不需注冊即可使用的,另一種則是必須經過系統登錄(即注冊)才能使用的。就好像一個臨時工,和一個記錄在員工名單上的長期合同工的區別一樣。如何才能區分這兩種DLL呢?方法很簡單,用剛才的Depends打開這個DLL,同樣是看函數輸出表,如果其中包含以下兩個函數(前者是注冊DLL,后者是反注冊DLL),那么就一定是需要注冊才能使用的DLL了。?
  DllRegisterServer?
  DllUnregisterServer?
  而regsvr32這個命令,實際上就是調用DLL中的這兩個函數(“regsvr32 /u DLL文件名”調用的即為DllUnregisterServer反注冊函數)。?
   3.插件DLL的秘密 ?
  Winamp、Foobar 2000等很多軟件都具有插件功能,從網上下載一個DLL放在插件目錄下就能讓程序支持新的功能,這是怎么做到的呢?就拿時下流行的播放軟件“千千靜聽”來舉例吧。?
  “千千靜聽”的插件目錄在該軟件安裝目錄下的Addin子目錄下,程序的插件目錄一般都會以“Plugins”、“Addin”來命名。在“千千靜聽”的插件目錄中有許多DLL文件,比如tt_asf.dll、tt_rm.dll等,從文件名中就能看出這些DLL是用來讓這個播放器支持各種不同類型的音頻文件的。同樣,用Depends打開這些文件,你就會發現這些文件的輸出函數表中都包括一個同樣的函數:ttpGetSoundAddIn(見圖4)。?

  這就是插件的秘密,各種支持插件功能的程序在發布時,都會同時發布一份插件協議,協議中規定了該程序將要調用的插件DLL中必須包含的函數名稱及相關的參數規則,然后第三方的插件程序員在編寫這個程序的插件時就根據這個插件的標準來編寫DLL的輸出函數。?
 ?、賹τ诓寮t_asf.dll?
  ttplayer.exe(“千千靜聽”主程序)對tt_asf.dll說:“我要調用你的ttpGetSoundAddIn函數!”?
  tt_asf.dll回答:“OK。”?
 ?、谌绻巡幌嚓P的DLL放進AddIn目錄?
  ttplayer.exe對未知DLL說:“我要調用你的ttpGetSoundAddIn函數!”?

  tt_asf.dll回答:“那是什么函數?從來沒聽說過!”



補充:工具下載地址?http://www.dependencywalker.com/

總結

以上是生活随笔為你收集整理的使用Dependency Walkers来检查exe文件中缺少的dll的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 综合久草 | 人人爽人人爽人人爽人人爽 | 日韩免费专区 | 成人av影院在线观看 | 波多野结衣一区二区三区在线 | 美腿丝袜亚洲综合 | 搡老熟女老女人一区二区 | 五月婷婷亚洲 | 国产美女作爱视频 | 亚洲经典视频在线观看 | 亚洲天堂精品视频 | 中文字幕一区二区三区人妻不卡 | 一卡二卡三卡 | 黄色三级网站在线观看 | 中字幕视频在线永久在线观看免费 | 成人合集 | 91精品人妻一区二区三区 | 国产高清一级 | 国产一区,二区 | 亚洲专区一区 | 黄色av网站在线 | 亚洲黄色片网站 | 奇米影视奇米色 | 下面一进一出好爽视频 | 亚洲电影一区二区 | 538任你躁在线精品免费 | 波多野结衣中文字幕一区二区三区 | 日韩一区视频在线 | 91久久影院 | 日韩一区二区三区av | av在观看 | h片在线观看网站 | 欧美性生活一区二区三区 | 成人片在线播放 | 久久精品国产欧美亚洲人人爽 | 在线a毛片 | 午夜资源站| 欧美精品在线视频观看 | 99久久婷婷国产综合精品草原 | 亚洲国产综合视频 | 日韩av不卡在线 | 香蕉国产在线视频 | 欧美呦呦 | 国产黄色在线播放 | 91视频二区 | 亚洲国产一区二区三区a毛片 | 国产私人影院 | 日韩欧美一区二区三区在线 | 涩涩涩在线视频 | 国产精品精品国产色婷婷 | 米奇av | 一区二区国产在线 | 91亚洲精品久久久蜜桃网站 | 亚洲黄色a级片 | 日韩电影在线观看中文字幕 | 一区二区国产在线观看 | 国产一级色 | 久草青青 | 成人性生交大片免费看中文 | 日本91av| jizzjizz在线播放 | 日韩欧美国产电影 | 谁有毛片网站 | 黑人操亚洲美女 | 91av视频网 | 久草视频精品在线 | 性感美女高潮 | 国产探花在线精品一区二区 | 色就是色亚洲色图 | 剧情av在线 | 久草福利视频 | 东南亚毛片 | 日韩a级片 | 91干干干| 黄色日皮视频 | 看黄色一级视频 | 一区二区在线精品 | 桃色一区二区 | 亚洲一区二区自偷自拍 | 久操这里只有精品 | 艳妇乳肉亭妇荡乳av | 国产精一区 | 大奶毛片 | 免费在线观看高清影视网站 | 亚洲激情自拍偷拍 | 欧美成人一区在线 | 日日操夜夜 | 麻豆视频网 | 成人一区二区三区仙踪林 | 国产91精品久久久久久久 | 欧美呦呦 | 黄色免费网站在线 | 一区二区高清视频 | 轻轻色在线观看 | 国产精品美女久久久久av爽 | 国产又猛又黄又爽 | 一级中国毛片 | 天天想夜夜操 | 男性裸体全身精光gay |