下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄調(diào)試信息的基本概念 21、 調(diào)試器是如何識(shí)別局部變量所對(duì)應(yīng)的函數(shù)的?調(diào)試器怎么知道源代碼行所對(duì)應(yīng)的執(zhí)行的CPU指令的? 22、 調(diào)試信息的分類 23、 調(diào)試信息格式 2調(diào)試信息之編譯選項(xiàng)(泄露與隱藏) 2調(diào)試信息解析之程序設(shè)計(jì)思路 3調(diào)試信息的基本概念調(diào)試器是如何識(shí)別局部變量所對(duì)應(yīng)的函數(shù)的?調(diào)試器怎么知道源代碼行所對(duì)應(yīng)的執(zhí)行的CPU指令的?首先我們知道程序?qū)嶋H上就是連續(xù)的機(jī)器指令(二進(jìn)制序列),額外的一些頭、表結(jié)構(gòu)用于操作系統(tǒng)進(jìn)行程序的調(diào)度執(zhí)行。當(dāng)程序被操作系統(tǒng)加載和運(yùn)行,操作系統(tǒng)會(huì)使用不同類型的內(nèi)存(棧、堆等)。但是這些無(wú)非還是二進(jìn)制序列。調(diào)試器要想知道問(wèn)題的答案,其實(shí)就是調(diào)試信息。調(diào)試信息(即是符號(hào))是用于幫助調(diào)試器分析被調(diào)試程序的布局的,因此調(diào)試信息能夠幫助調(diào)試器定位局部變量以及函數(shù)的地址,顯示變量的值(包括結(jié)構(gòu)體以及類這樣復(fù)雜的結(jié)構(gòu)),并且能夠?qū)⒃嫉刂酚成涞皆创a的行。調(diào)試信息的分類調(diào)試信息類型簡(jiǎn)要描述公開(kāi)函數(shù)和變量描述跨越編譯單元的可見(jiàn)函數(shù)和變量,調(diào)度信息存儲(chǔ)其位置和名字私有函數(shù)和變量描述所有函數(shù)和變量,包括跨越編譯單元不可見(jiàn)的函數(shù)和變量(如static函數(shù),static及局部變量,函數(shù)參數(shù)).調(diào)試信息存儲(chǔ)其位置,大小和名字源文件和行信息描述了從源代碼行到程序?qū)?yīng)位置的映射(注釋行當(dāng)然不會(huì)描述)類型信息調(diào)試信息存儲(chǔ)類型額外信息,這些信息使調(diào)試器能夠區(qū)分int或string或是用戶自定類型。對(duì)于函數(shù),調(diào)試器則知道參數(shù)個(gè)數(shù),調(diào)用約定,函數(shù)返回類型FPO信息函數(shù)編譯使用FPO優(yōu)化,調(diào)試信息使調(diào)試器能夠知道棧幀的準(zhǔn)確大小,如果沒(méi)有這些信息,調(diào)試器無(wú)法顯示被優(yōu)化程序的調(diào)用棧編輯和繼續(xù)信息這個(gè)信息主要用于VS實(shí)現(xiàn)編輯并繼續(xù)功能調(diào)試信息格式COFF格式:只包含三種調(diào)試信息類型(公開(kāi)函數(shù)和變量,源代碼行信息,F(xiàn)PO信息),存儲(chǔ)在可執(zhí)行文件中。CodeView格式:包含除編輯和繼續(xù)信息外的所有種類的調(diào)試信息類型,存儲(chǔ)在可執(zhí)行文件中,也可以存儲(chǔ)在.DBG文件中PDB格式:可存儲(chǔ)所有類型的調(diào)試信息,存儲(chǔ)在PDB文件中。調(diào)試信息之編譯選項(xiàng)(泄露與隱藏)VC6編譯選項(xiàng)/Zd該選項(xiàng)告訴編譯器產(chǎn)生COFF格式的調(diào)試信息,并將信息存儲(chǔ)在obj文件中/Z7該選項(xiàng)告訴編譯器產(chǎn)生CodeView格式的調(diào)試信息,信息存儲(chǔ)在obj文件中/Zi該選項(xiàng)告訴編譯器產(chǎn)生PDB格式調(diào)試信息,信息存儲(chǔ)在obj文件中/ZI該選項(xiàng)基本同/Zi,只是該選項(xiàng)會(huì)包含編輯并繼續(xù)的信息。VC6鏈接選項(xiàng)/debug該選項(xiàng)告訴鏈接器產(chǎn)生調(diào)試為EXE產(chǎn)生調(diào)試信息,如果不指定,則沒(méi)有調(diào)試信息產(chǎn)生/debugtype該選項(xiàng)指定生成的調(diào)試信息的格式,包含以下幾種選擇/debugtype:coff使用COFF格式/debugtype:cv使用CodeView或者是PDB(依賴/pdb選項(xiàng))/debugtype:both使用COFF和CodeView/PDB格式(即是COFF+CodeView或者COFF+PDB)/debugtype:coff選項(xiàng)將不會(huì)產(chǎn)生源文件和行信息,即使編譯過(guò)程中產(chǎn)生了源文件和行信息的調(diào)試信息。/pdb該選項(xiàng)指定存儲(chǔ)為PDB,并指定存儲(chǔ)的文件名,對(duì)于/debugtype:coff無(wú)意義。VC6之后VS編譯選項(xiàng)/Zd該選項(xiàng)不再產(chǎn)生COFF格式,但調(diào)試信息類型同COFF格式所包含的類型其它選項(xiàng)不變。VC6之后VS鏈接選項(xiàng)基本同VC6鏈接選項(xiàng)。調(diào)試信息解析之程序設(shè)計(jì)思路首先看一下PE格式的布局DosHeaderDosHeaderDosstubDosstubPESigPESigHeadersHeadersFileHeaderFileHeaderOptionalHeaderOptionalHeaderSectionHeaderSectionHeader.textsection(code).textsection(code)SectionsSections.datasection.datasectionothersectionothersectionOtherDataDataOtherDataData調(diào)試信息存儲(chǔ)格式在前面已經(jīng)說(shuō)了(COFF、CodeView,當(dāng)調(diào)試信息存儲(chǔ)在EXE中時(shí))。其它的存儲(chǔ)格式(PDB、CodeView存儲(chǔ)在一個(gè)單獨(dú)的文件中)。在單獨(dú)文件中時(shí),EXE中將包含一些調(diào)試信息使調(diào)試器知道單獨(dú)存儲(chǔ)的文件的存在并找到對(duì)應(yīng)的文件。怎么找到調(diào)試信息?IMAGE_OPTIONAL_HEADER結(jié)構(gòu)中的DataDirectory成員是一個(gè)IMAGE_DATA_DIRECTORY結(jié)構(gòu)的數(shù)組。typedefstruct_IMAGE_DATA_DIRECTORY{ DWORDVirtualAddress; DWORDSize;}IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;typedefstruct_IMAGE_OPTIONAL_HEADER{ WORDMagic; …//Manyotherfields IMAGE_DATA_DIRECTORYDataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];}IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;在索引為6(IMAGE_DIRECTORY_ENTRY_DEBUG)的entry包含的則是debug目錄的size及address。Debug目錄存儲(chǔ)在PE節(jié)中,由IMAGE_DEBUG_DIRECTROY結(jié)構(gòu)數(shù)組構(gòu)成。#defineIMAGE_DEBUG_TYPE_UNKNOWN0#defineIMAGE_DEBUG_TYPE_COFF1#defineIMAGE_DEBUG_TYPE_CODEVIEW2#defineIMAGE_DEBUG_TYPE_FPO3#defineIMAGE_DEBUG_TYPE_MISC4#defineIMAGE_DEBUG_TYPE_EXCEPTION5#defineIMAGE_DEBUG_TYPE_FIXUP6#defineIMAGE_DEBUG_TYPE_OMAP_TO_SRC7#defineIMAGE_DEBUG_TYPE_OMAP_FROM_SRC8#defineIMAGE_DEBUG_TYPE_BORLAND9#defineIMAGE_DEBUG_TYPE_RESERVED1010#defineIMAGE_DEBUG_TYPE_CLSID11typedefstruct_IMAGE_DEBUG_DIRECTORY{ DWORDCharacteristics; DWORDTimeDateStamp; WORDMajorVersion; WORDMinorVersion; DWORDType; DWORDSizeOfData; DWORDAddressOfRawData; DWORDPointerToRawData;}IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;IMAGE_DEBUG_DIRECTORY域中的Type指明了格式的類型:Type描述IMAGE_DEBUG_TYPE_COFFCOFF格式調(diào)試信息IMAGE_DEBUG_TYPE_CODEVIEWCodeView格式調(diào)試信息(存儲(chǔ)在EXE或PDB中)IMAGE_DEBUG_TYPE_MISCCodeView格式調(diào)試信息(存儲(chǔ)在DBG中)IMAGE_DEBUG_TYPE_FPOFramepointeromission信息,輔助調(diào)試優(yōu)化的EXE通過(guò)上面的相關(guān)結(jié)構(gòu)的介紹,至此我們可以給出調(diào)試程序信息獲取的整個(gè)完整的設(shè)計(jì):由PE的OptionalHeader的DataDirectory成員找到Debug目錄。從IMAGE_DEBUG_DIRECTORY中提取調(diào)試信息的位置及大小信息解析出對(duì)應(yīng)的調(diào)試信息OptionalHeader.DataDirectoryOptionalHeader.DataDirectoryDebugDirectoryDebugDirectoryDebugInforma
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度卷簾門電機(jī)銷售與安裝一體化服務(wù)合同3篇
- 2025年度水產(chǎn)品出口貿(mào)易合同(2025版)
- 2024版大棚建筑與農(nóng)業(yè)廢棄物資源化利用及環(huán)保技術(shù)合作協(xié)議3篇
- 2024版建筑工程分包意向協(xié)議書(shū)格式4篇
- 2025年度樓頂租賃服務(wù)合同(附帶屋頂綠化景觀設(shè)計(jì))3篇
- 語(yǔ)音放大電路的課程設(shè)計(jì)
- 二零二五年度定制餐飲品牌授權(quán)經(jīng)營(yíng)與品牌推廣合同3篇
- 行為禮儀課程設(shè)計(jì)
- 二零二五年度廚房員工加班費(fèi)計(jì)算與勞動(dòng)合同模板3篇
- 二零二五年度歷史建筑保護(hù)項(xiàng)目委托開(kāi)發(fā)合同樣本2篇
- 精品資料(2021-2022年收藏)集團(tuán)各控股子公司董事會(huì)議事規(guī)則
- t-橋式起重機(jī)設(shè)計(jì)計(jì)算書(shū)
- 全口義齒印模及頜位關(guān)系記錄ppt課件
- 定點(diǎn)洗車協(xié)議書(shū)(共2頁(yè))
- 電除塵器計(jì)算
- 桿塔選型(高度、形式、基礎(chǔ))
- Q∕CR 9213-2017 鐵路架橋機(jī)架梁技術(shù)規(guī)程
- 加油站消防設(shè)計(jì)文件(范例)
- 上海某建筑工程施工現(xiàn)場(chǎng)臨建板房搭設(shè)方案(附示意圖)
- 中越文勞動(dòng)合同樣本
- 施工干擾措施
評(píng)論
0/150
提交評(píng)論