<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 解析基于ELF的嵌入式軟件源碼級交叉調試技術(shù)

解析基于ELF的嵌入式軟件源碼級交叉調試技術(shù)

作者: 時(shí)間:2012-08-10 來(lái)源:網(wǎng)絡(luò ) 收藏

三、器實(shí)現的要點(diǎn)

在設計器JDBG時(shí),首先完成與目標文件無(wú)關(guān)的部分:連接目標機,查看修改目標機寄存器和內存;然后實(shí)現與目標文件有關(guān)的部分:下載目標文件到目標機,功能,包括斷點(diǎn)控制、執行控制、變量觀(guān)察等,以下重點(diǎn)討論各項功能的設計與實(shí)現。

1、 下載目標文件

目標文件中包含多種類(lèi)型的內容,目標程序在目標機上運行時(shí)只需要程序的二進(jìn)制指令代碼與相關(guān)數據,這些內容包含在文件中的可執行程序段中。下載目標文件時(shí)在宿主機上提取目標文件中的代碼與數據段,根據其地址映射關(guān)系利用remote協(xié)議中寫(xiě)內存的功能在目標機上建立程序的遠程映像。

2、 斷點(diǎn)

斷點(diǎn)是調試器控制程序執行的基本手段。各種機器有其特殊的斷點(diǎn)指令(如X86的int3指令),設置斷點(diǎn)就是將機器斷點(diǎn)指令替換所指定程序單元中的指令,使得程序運行到斷點(diǎn)指令處時(shí),產(chǎn)生“斷點(diǎn)異常”,用戶(hù)程序不再繼續執行下去,目標機向宿主機返回斷點(diǎn)停止信號,由宿主機調試器接管對用戶(hù)程序的控制。

斷點(diǎn)分為邏輯斷點(diǎn)與物理斷點(diǎn),兩者是多對一的關(guān)系。邏輯斷點(diǎn)與源代碼對應,提供源級斷點(diǎn)信息(源文件名+行號或物理地址等);物理斷點(diǎn)與目標碼對應,提供斷點(diǎn)的目標碼地址及斷點(diǎn)處的指令內容。插入一個(gè)斷點(diǎn)即根據邏輯斷點(diǎn)信息確定物理斷點(diǎn)地址,將該地址對應指令用機器斷點(diǎn)指令替代;刪除斷點(diǎn)即恢復斷點(diǎn)指令處預先保存的原指令,使得程序可繼續執行。

檢查點(diǎn)是一種條件斷點(diǎn),使程序在條件滿(mǎn)足時(shí)停止執行。通常條件都涉及表達式的值變化,利用寫(xiě)內存保護來(lái)檢查表達式的值是最常用的方法,但這種方法不適用于不具備MMU功能的處理器。某些處理器(如i386)提供了專(zhuān)門(mén)的調試控制寄存器,通過(guò)在調試控制寄存器中設置相應線(xiàn)性地址及中止條件(讀或寫(xiě))即可中止程序的運行。通過(guò)查詢(xún)方式檢查表達式的值也是一種可行的方法,其效率相對較低。當檢查點(diǎn)的條件滿(mǎn)足時(shí),檢查點(diǎn)的操作與普通斷點(diǎn)類(lèi)似。

對一個(gè)斷點(diǎn)應具有基本的插入、刪除、使能、使不能等基本操作功能。在設計中采用雙向鏈表結構作為斷點(diǎn)的數據結構,使得斷點(diǎn)控制更加方便高效。

3、 啟動(dòng)程序運行

啟動(dòng)程序運行首先從目標文件的頭中得到應用程序的入口,將目標機的PC寄存器置為該入口地址,從入口處開(kāi)始執行程序指令。如果程序中沒(méi)有設置任何斷點(diǎn)或檢查點(diǎn),則程序一直運行到結束;如果程序中有斷點(diǎn),則程序運行到第一個(gè)斷點(diǎn)處停止并返回其停止位置。

4、 級單步調試

源碼級單步以行為單位,一行源代碼對應多條機器指令,因此一個(gè)源語(yǔ)句的單步執行需要多個(gè)機器指令的單步執行。最簡(jiǎn)單的實(shí)現方法就是從源語(yǔ)句對應目標代碼的起始地址開(kāi)始逐條單步執行機器指令。顯然這種方法效率很低,尤其調試需要大量宿主機/目標機間的通訊,而且有的處理器自身并不提供機器單步執行指令。因此,更有效的方法是用“內部臨時(shí)斷點(diǎn)+連續執行”的方式來(lái)實(shí)現。

用機器單步執行時(shí),每執行完一條機器指令立即讀取當前PC,判斷程序停止位置。調試器對程序的控制是即時(shí)交互的,當單步執行結束、跳轉或進(jìn)入函數調用時(shí),調試器都會(huì )即時(shí)得知。不采用機器單步,則不具有這種即時(shí)掌握程序運行狀態(tài)的便利,需要在運行前反匯編目標代碼,通過(guò)分析匯編指令預測程序單步執行可能的出口位置,并在該處設上斷點(diǎn)??赡艿某隹谖恢冒ㄔ撔兄噶畹慕K止地址、跳轉、分枝跳轉、函數調用等指令。對于跳轉指令,能得到絕對地址則直接在跳轉地址處設斷點(diǎn),不能得到跳轉地址則在指令處設斷點(diǎn),再執行跳轉指令由當前PC值確定程序停止的位置。對于函數調用指令,如果采用單步跳過(guò)(stepover)方式,則將其作為普通指令看待,直接執行調用函數;如果采用單步進(jìn)入(stepinto)方式,則需在指令處設斷點(diǎn),再執行調用指令,以進(jìn)入函數內部讓用戶(hù)繼續跟蹤程序的執行。

以單步跳出方式(stepout)執行程序時(shí),以子程序為單位,需執行完當前子程序的所有代碼,在調用該子程序的下一條語(yǔ)句處停止。通過(guò)反匯編當前子程序的所有指令,可得到該子程序所有可能的函數返回出口,在這些函數返回指令處設臨時(shí)斷點(diǎn),程序運行到斷點(diǎn)處再執行該返回指令跳出當前子程序,處理調用該子程序的語(yǔ)句行的后繼信息,最終確定程序停止位置。

5、數據瀏覽

數據與指令同樣是構成程序的根本。數據類(lèi)型繁多,不同的類(lèi)型處理起來(lái)有所不同,其基本原理是由數據名找到存放該數據的地址,再從地址中取出數據的值。關(guān)鍵在于找到名與地址的映射關(guān)系。這些信息可從.debug,.symtab等節中得到。全局變量一般可得到直接的地址信息,而局部變量采用堆棧方式存放在內存中,需根據從.debug中得到的該變量在堆棧中的位置信息來(lái)確定地址。采用表結構來(lái)管理變量,將每個(gè)變量的名、地址等信息登記在表中,將對數據值的操作轉化為對相應地址的內存單元操作,如查看變量即為讀取該變量所在內存單元的內容。

四、調試器JDBG簡(jiǎn)述

JDBG采用圖形用戶(hù)界面,相應的命令提供圖形按鈕或菜單,并提供快捷鍵。進(jìn)入調試之前,先連接目標機,在連接時(shí)設置連接參數并保存,在以后的連接中可直接使用已保存的設置參數。當宿主機/目標機處于連接狀態(tài)時(shí),下載目標文件,啟動(dòng)調試器。調試器啟動(dòng)后,用戶(hù)可在打開(kāi)的源文件中設置斷點(diǎn),運行下載的目標程序,查看/修改寄存器、內存的內容。當運行的目標程序停止后,返回停止點(diǎn)源碼信息,用戶(hù)可以觀(guān)察數據,添加新的斷點(diǎn)或刪除已設斷點(diǎn),控制程序的單步執行或連續執行,或退出調試狀態(tài)。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>