欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Windows系統的活動(dòng)大陸:細看DLL文件
在Windows世界中,有無(wú)數塊活動(dòng)的大陸,它們都有一個(gè)共同的名字——動(dòng)態(tài)鏈接庫?,F在就走進(jìn)這些神奇的活動(dòng)大陸,找出它們隱藏已久的秘密吧!

初窺門(mén)徑:Windows的基石

隨便打開(kāi)一個(gè)系統目錄,一眼望去就能看到很多擴展名DLL的文件,這些就是經(jīng)常說(shuō)的“動(dòng)態(tài)鏈接庫”,DLL是Dynamic Link Library(即“動(dòng)態(tài)鏈接庫”)的縮寫(xiě)。從Microsoft公司推出首個(gè)版本的Windows以來(lái),動(dòng)態(tài)鏈接庫就一直是這個(gè)操作系統的基礎。

1.看看DLL里有什么

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

2.系統中幾個(gè)重要的DLL

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

3.為什么要用DLL

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

①擴展應用程序

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

②便于程序員合作

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

③節省內存

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

④共享程序資源

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

⑤解決應用程序本地化問(wèn)題

在下載了某個(gè)程序的漢化包后,打開(kāi)漢化說(shuō)明,經(jīng)??梢钥吹接孟螺d包中的DLL文件覆蓋掉程序原來(lái)的DLL,漢化就完成了。這些程序都是將執行代碼和應用程序界面分開(kāi)編寫(xiě)了,所以漢化者只需簡(jiǎn)單地將其中和程序界面相關(guān)的DLL漢化并發(fā)布即可。

求知若渴:探究DLL的真相

誰(shuí)知道DLL里究竟有多少函數,又有誰(shuí)知道EXE調用了哪個(gè)DLL的哪些函數?其實(shí),這個(gè)問(wèn)題并不難解決。分析EXE文件的工具Dependency Walker(以下簡(jiǎn)稱(chēng)Depends,點(diǎn)擊下載Dependency Walker),今天它就是大家探險的工具,把DLL真相探個(gè)通通透透。

1.看看DLL里有多少函數

第一步:下載并解壓Depends,運行其中的depends.exe,然后選擇菜單“File→Open”(文件→打開(kāi)),在文件選擇框中選中需要分析的DLL文件并打開(kāi),此處選擇QQ目錄下的QQZip.dll。

第二步:在程序左側的樹(shù)狀欄中就列出了這個(gè)DLL使用了哪些其他DLL的功能函數(原來(lái)DLL中還可以調用其他DLL^O^),而右側的兩個(gè)分欄列表分別顯示了函數輸入及輸出表,函數輸出表即為該DLL提供給其他EXE或者DLL調用的函數的總列表。

第三步:函數輸出表的Function欄中即為輸出函數的名稱(chēng)(見(jiàn)圖1),在QQZip.dll中共發(fā)現了2個(gè)函數:Unzip、Zip。因此可以判斷該DLL在QQ程序中負責壓縮和解壓縮的任務(wù)。



圖1 QQZip.dll中的函數2.審審EXE究竟用了哪個(gè)DLL

還是拿QQ來(lái)作為例子,在Depends中打開(kāi)QQ.exe,這時(shí)界面左側的樹(shù)狀列表中顯示的就是QQ.exe調用的DLL列表(見(jiàn)圖2),如果展開(kāi)這些DLL分支,還會(huì )發(fā)現其他的DLL,這就說(shuō)明QQ調用的這些DLL文件還有可能(幾乎是肯定)再調用別的DLL。這就好比買(mǎi)了一臺新的DVD機,可能其中用的機芯是SONY的,而這個(gè)機芯里的一個(gè)小電容又有可能是別的公司的,這是同樣的道理。



圖2 QQ.exe所調用的dll  
3.用DLL看穿EXE真面目

剛才得到了QQ.exe所使用的DLL列表,其實(shí)通過(guò)這個(gè)列表,還能分析出很多別的信息。比如其中包含MFC42.dll,所以可以判斷QQ.exe是采用VC(即Visual C++)編寫(xiě)的,而包含WSOCK32.dll則說(shuō)明這個(gè)程序帶有網(wǎng)絡(luò )通訊功能(廢話(huà)!QQ如果不能網(wǎng)絡(luò )通訊還有什么用……)。以下是一個(gè)簡(jiǎn)表,大家在分析別的EXE時(shí)可以根據其所使用的DLL來(lái)對其功能進(jìn)行初步判斷。

DLL文件名 可以判斷出的EXE信息

MFC42.dll 使用VC5.0/6.0編寫(xiě)。
VBRun*.dll “*”代表數字版本號,使用VB3.0/4.0編寫(xiě)。
MSVBVM50.dll 使用VB5.0編寫(xiě),在Windows 98(SE)上自帶該DLL。
MSVBVM60.dll 使用VB6.0編寫(xiě),在Windows Me/2000/XP等系統上自帶該DLL。
ADVAPI32.dll 可能會(huì )進(jìn)行注冊表操作。
WSOCK32.dll 具備網(wǎng)絡(luò )通訊功能。
WS2_32.dll 具備網(wǎng)絡(luò )通訊功能。
WININET.dll 具備HTTP瀏覽、下載等功能,典型的例子是瀏覽器、下載工具。
WINMM.dll 具備多媒體播放能力。
DDRAW.dll 游戲、高級圖像處理工具。
D3D*.dll 3D游戲,或者動(dòng)畫(huà)處理工具。
4.DLL是個(gè)大寶庫


除供應用程序調用函數的DLL外,還有另一種用來(lái)保存資源的DLL,比如QQ目錄下的QQRes.dll,用Depends打開(kāi)后發(fā)現沒(méi)有任何輸出函數,難道是一個(gè)雞肋DLL?可是改用資源工具Resource Hacker(下載地址:http://www.onlinedown.net/soft/12420.htm)打開(kāi)這個(gè)DLL后,就發(fā)現原來(lái)其中保存了這么多QQ的資源,包括圖標、音樂(lè )、圖片、字符串、對話(huà)框……(見(jiàn)圖3)



圖3 dll文件中包含的其他資源刨根問(wèn)底
LL的寓言

DLL引起的故障是很常見(jiàn)的,為什么會(huì )引起故障?遇到故障怎么解決?噓~偷聽(tīng)一下DLL的對話(huà),你就會(huì )明白了。

1.從搬運工談接口兼容性

在Windows工地上,有一個(gè)名叫EXE的包工頭,他手下有很多稱(chēng)為DLL的建筑工人。其中有一個(gè)專(zhuān)門(mén)負責搬運的DLL(暫且稱(chēng)為“搬運工A”),每次需要搬運水泥時(shí),包工頭EXE都只要對他喊一聲:“來(lái)!搬?!?br>
過(guò)了一段時(shí)間,搬運工A覺(jué)得自己的效率太低,于是從原來(lái)的每次搬1袋水泥改成了每次搬3袋水泥。改進(jìn)了搬運方法后,EXE包工頭仍然每次只是喊一聲:“來(lái)!搬?!眳s不知搬運工A已經(jīng)改變了搬運的方法。

但又過(guò)了一段時(shí)間,包工頭EXE把搬運工A給辭退了,從別的工地上找來(lái)了另一個(gè)DLL(暫且稱(chēng)為“搬運工B”)。這個(gè)搬運工在別的工地的時(shí)候,搬運東西特別快,所以包工頭EXE決定把搬運工作給“升級”一下。但真正開(kāi)始工作時(shí),包工頭才發(fā)現出了問(wèn)題……現在不管叫幾遍“來(lái)!搬?!边@個(gè)新來(lái)的搬運工B都不知道究竟應該搬什么。

上面的例子中,搬運工A改進(jìn)搬運方法,但EXE調用它的方法仍不變,這就是DLL升級的原理,改進(jìn)了內部的實(shí)現方法,但調用接口不變,這樣EXE文件不用跟著(zhù)升級,就能調用新版本的DLL了。而搬運工B的故事說(shuō)明,不管新版本的DLL效率多高,如果接口(可以理解為DLL中輸出的函數名)與原來(lái)的不一致,那么EXE就不知道也無(wú)法調用它了。

2.登記身份證的DLL

在系統故障中,有很多都是由于DLL文件沒(méi)有注冊造成的,比如Windows XP的壓縮文件夾功能出現故障就很有可能是系統目錄中的zipfldr.dll沒(méi)有注冊造成的,這類(lèi)故障的解決方法也大多是運行如下命令:

regsvr32 DLL文件名

很多人不理解為什么要這么做,是不是所有的DLL都能這樣做呢?

其實(shí)系統中有兩種DLL,一種是不需注冊即可使用的,另一種則是必須經(jīng)過(guò)系統登錄(即注冊)才能使用的。就好像一個(gè)臨時(shí)工,和一個(gè)記錄在員工名單上的長(cháng)期合同工的區別一樣。如何才能區分這兩種DLL呢?方法很簡(jiǎn)單,用剛才的Depends打開(kāi)這個(gè)DLL,同樣是看函數輸出表,如果其中包含以下兩個(gè)函數(前者是注冊DLL,后者是反注冊DLL),那么就一定是需要注冊才能使用的DLL了。

DllRegisterServer

DllUnregisterServer

而regsvr32這個(gè)命令,實(shí)際上就是調用DLL中的這兩個(gè)函數(“regsvr32 /u DLL文件名”調用的即為DllUnregisterServer反注冊函數)。

3.插件DLL的秘密

Winamp、Foobar 2000等很多軟件都具有插件功能,從網(wǎng)上下載一個(gè)DLL放在插件目錄下就能讓程序支持新的功能,這是怎么做到的呢?就拿時(shí)下流行的播放軟件“千千靜聽(tīng)”來(lái)舉例吧。

“千千靜聽(tīng)”的插件目錄在該軟件安裝目錄下的Addin子目錄下,程序的插件目錄一般都會(huì )以“Plugins”、“Addin”來(lái)命名。在“千千靜聽(tīng)”的插件目錄中有許多DLL文件,比如tt_asf.dll、tt_rm.dll等,從文件名中就能看出這些DLL是用來(lái)讓這個(gè)播放器支持各種不同類(lèi)型的音頻文件的。同樣,用Depends打開(kāi)這些文件,你就會(huì )發(fā)現這些文件的輸出函數表中都包括一個(gè)同樣的函數:ttpGetSoundAddIn(見(jiàn)圖4)。



圖4 千千靜聽(tīng)所使用的插件協(xié)議這就是插件的秘密,各種支持插件功能的程序在發(fā)布時(shí),都會(huì )同時(shí)發(fā)布一份插件協(xié)議,協(xié)議中規定了該程序將要調用的插件DLL中必須包含的函數名稱(chēng)及相關(guān)的參數規則,然后第三方的插件程序員在編寫(xiě)這個(gè)程序的插件時(shí)就根據這個(gè)插件的標準來(lái)編寫(xiě)DLL的輸出函數。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
VB資源寶典(API函數大全)
MATLAB與Visual?Basic
Unity與 DLL文件 ??| 什么是DLL??
木馬各種隱藏技術(shù)披露
不讓別人動(dòng)我的程序,禁止運行某個(gè)程序! - BibiL
動(dòng)態(tài)鏈接庫的靜態(tài)鏈接導致程序的DLL劫持漏洞
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久