版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、不知道諸位看官是否有過(guò)這樣的經(jīng)歷:在不經(jīng)意之間發(fā)現(xiàn)一個(gè)DLL文件,它里邊有不少有趣的導(dǎo)出函數(shù)——但是由于你不知道如何調(diào)用這些函數(shù),所以只能大發(fā)感慨而又無(wú)能為力焉。固然有些知名的DLL可以直接通過(guò)搜索引擎來(lái)找到它的使用方式(比如本文中的例子ipsearcher.dll),不過(guò)我們誠(chéng)然不能希望自己總能交到這樣的好運(yùn)。所以在本文中,李馬希望通過(guò)自己文理不甚通達(dá)的講解能夠給大家以授人以漁的效果。不知道諸位看官是否有過(guò)這樣的經(jīng)歷:在不經(jīng)意之間發(fā)現(xiàn)
2、一個(gè)DLL文件,它里邊有不少有趣的導(dǎo)出函數(shù)——但是由于你不知道如何調(diào)用這些函數(shù),所以只能大發(fā)感慨而又無(wú)能為力焉。固然有些知名的DLL可以直接通過(guò)搜索引擎來(lái)找到它的使用方式(比如本文中的例子ipsearcher.dll),不過(guò)我們誠(chéng)然不能希望自己總能交到這樣的好運(yùn)。所以在本文中,李馬希望通過(guò)自己文理不甚通達(dá)的講解能夠給大家以授人以漁的效果。先決條件先決條件閱讀本文,你需要具備以下先決條件:?初步了解匯編語(yǔ)言,雖然你并不一定需要去讀懂DLL
3、中導(dǎo)出函數(shù)的匯編代碼,但是你至少應(yīng)該了解諸如push、mov這些常用的匯編指令。?一個(gè)能夠查看DLL中導(dǎo)出函數(shù)的工具,VisualStudio中自帶的DependencyWalker就足夠勝任了,當(dāng)然你也可以選擇eXeScope。?一個(gè)調(diào)試器。理論上講VC也可以完成調(diào)試的工作,但它畢竟是更加針對(duì)于源代碼一級(jí)調(diào)試的工具,所以你最好選擇一個(gè)專用的匯編調(diào)試器。在本文中我用的是OllyDbg——我不會(huì)介紹有關(guān)這個(gè)調(diào)試工具的任何東西,而只是簡(jiǎn)要介
4、紹我的調(diào)試過(guò)程。準(zhǔn)備好了嗎?那么我們做一個(gè)熱身運(yùn)動(dòng)吧先。熱身熱身——函數(shù)調(diào)用約定函數(shù)調(diào)用約定這里要詳細(xì)介紹的是有關(guān)函數(shù)調(diào)用約定的內(nèi)容,如果你已經(jīng)了解了這方面的內(nèi)容,可以跳過(guò)本節(jié)。你可能在學(xué)習(xí)Windows程序設(shè)計(jì)的時(shí)候早已接觸過(guò)“函數(shù)調(diào)用約定”這個(gè)詞匯了,那個(gè)時(shí)候你所了解的內(nèi)容可能是一個(gè)籠統(tǒng)的概念,內(nèi)容大抵是說(shuō)函數(shù)調(diào)用約定就是指的函數(shù)參數(shù)進(jìn)棧順序以及堆棧修正方式。譬如cdecl調(diào)用約定是函數(shù)參數(shù)自右而左進(jìn)棧,由調(diào)用者修復(fù)堆棧;stdca
5、ll調(diào)用約定亦是函數(shù)參數(shù)自右而左進(jìn)棧,但是由被調(diào)用者修復(fù)堆?!薏?,這太晦澀了——在源代碼上我們是無(wú)法看到這些東西的!那么我們別無(wú)選擇,只有深入到匯編一層了??紤]以下C代碼:#include00401014MOVECXDWDPTRSS:[ESP8]00401018CMPEAXECX0040101AJGSHTCppTest.0040101E0040101CMOVEAXECX0040101ERETN8被調(diào)用者的堆棧修正max1(12)00
6、401030PUSH200401032PUSH100401034CALLCppTest.0040100000401039ADDESP8調(diào)用者的堆棧修正max2(12)0040104APUSH20040104CPUSH10040104ECALLCppTest.00401010好了,我來(lái)簡(jiǎn)要介紹一下。函數(shù)參數(shù)傳入函數(shù)體是借由堆棧段完成的,也就是將各個(gè)參數(shù)依某種次序推入SS中——在cdecl與stdcall約定中,這個(gè)次序都是自右而左的。另外
7、,由于將參數(shù)推入了堆棧致使堆棧指針ESP發(fā)生了變化,所以要在函數(shù)結(jié)束的時(shí)候重新修正ESP。從上邊的匯編代碼中你也可以很清楚地看到,cdecl約定是在調(diào)用max1之后修正的ESP,而stdcall約定則是在max2返回時(shí)借由RETN8完成了這個(gè)修正工作。另外,從上邊的匯編代碼中還可以看到,函數(shù)的返回值是由EAX帶回的。庖丁解牛庖丁解牛在了解了以上的知識(shí)后,我們就可以使用調(diào)試器來(lái)調(diào)試那個(gè)未知的DLL了??梢哉f(shuō),這整個(gè)的調(diào)試過(guò)程充滿了驚險(xiǎn)和刺
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 客戶端調(diào)用dll接口說(shuō)明
- 總結(jié)vs2010調(diào)用lib,和dll
- 如何用vc++創(chuàng)建及調(diào)用dll
- [java]使用jni技術(shù)實(shí)現(xiàn)java程序調(diào)用dll
- 在易語(yǔ)言中調(diào)用dll使用說(shuō)明
- 在excel vba中調(diào)用excel自帶函數(shù)
- linux-系統(tǒng)調(diào)用函數(shù)
- vc調(diào)用matlab中定義的.m文件中的函數(shù)的實(shí)例
- 進(jìn)化測(cè)試中嵌套If-Else和函數(shù)調(diào)用結(jié)構(gòu)的適值函數(shù)設(shè)計(jì).pdf
- delphi編寫調(diào)用有窗體有返回值的dll的實(shí)現(xiàn)方1
- 匯編課程設(shè)計(jì)--函數(shù)調(diào)用
- 用visualc#調(diào)用windowsapi函數(shù)
- 區(qū)分什么時(shí)候調(diào)用構(gòu)造函數(shù)
- 聯(lián)系函數(shù)未知時(shí)對(duì)ROC的估計(jì).pdf
- 系統(tǒng)調(diào)用函數(shù)庫(kù)分析及實(shí)例
- 匯編,調(diào)用子函數(shù)來(lái)延遲顯示數(shù)字
- 基于函數(shù)調(diào)用序列的漏洞定位方法研究.pdf
- 基于函數(shù)調(diào)用關(guān)系分析軟件網(wǎng)絡(luò)特征.pdf
- 基于HMM的函數(shù)調(diào)用序列模式發(fā)現(xiàn)與識(shí)別研究.pdf
評(píng)論
0/150
提交評(píng)論