<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于ELF的嵌入式軟件源碼級交叉調(diào)試技術(shù)

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

          作者: 時間:2012-03-20 來源:網(wǎng)絡(luò) 收藏
          1 引言
          在計算機軟件技術(shù)的發(fā)展過程中,各種編程調(diào)試技術(shù)與工具取得了重大的發(fā)展,其中調(diào)試工具一直是工具軟件中研究應(yīng)用的一大熱點。

          開發(fā)任何一個軟件都不可避免地存在各種錯誤,要修正錯誤必須找出其錯誤原因。通常程序員利用調(diào)試器來跟蹤程序執(zhí)行情況,快速有效地定位錯誤產(chǎn)生的位置從而找到引起錯誤的原因,并改正錯誤。

          調(diào)試器為用戶提供的主要功能包括:在目標程序中設(shè)置、刪除斷點;以單步執(zhí)行或連續(xù)執(zhí)行等方式控制目標程序運行;瀏覽程序中的變量或表達式的值;查看、修改目標機寄存器的內(nèi)容;查看、修改目標機內(nèi)存的內(nèi)容。源碼級調(diào)試器是面向高級語言的符號調(diào)試工具,它基于源代碼的語句和符號跟蹤觀察目標程序,同時提供基于匯編級的程序跟蹤功能以滿足用戶底層的調(diào)試需要。通用計算機軟件一般在同一臺機器上進行編輯、編譯、調(diào)試;而嵌入式軟件的目標系統(tǒng)多為特殊的專用系統(tǒng),通常采用宿主機/目標機開發(fā)環(huán)境,借助通用計算機作為編輯源文件的宿主機,利用交叉編譯器在宿主機上編譯生成目標機的可執(zhí)行代碼,調(diào)試時通過通訊介質(zhì)(串線或網(wǎng)絡(luò))將目標代碼下載到目標系統(tǒng)上運行,利用交叉調(diào)試器進行跟蹤調(diào)試。

          國外計算機業(yè)在調(diào)試器領(lǐng)域中發(fā)展很快,開發(fā)了許多功能強大、支持多種目標機的交叉調(diào)試器。但國內(nèi)在調(diào)試器領(lǐng)域中一直處于落后狀態(tài),普遍采用的多是國外的工具產(chǎn)品。目前國內(nèi)的嵌入式系統(tǒng)發(fā)展迅速,對嵌入式軟件的開發(fā)環(huán)境也提出了新的要求,因此,我們著手進行嵌入式軟件的源碼級交叉調(diào)試器的設(shè)計與實現(xiàn),以適應(yīng)當前嵌入式軟件發(fā)展的需要。

          2 源碼級交叉調(diào)試器的實現(xiàn)途徑

          程序運行過程中目標程序的指令代碼和數(shù)據(jù)都映射到目標機上相應(yīng)的內(nèi)存內(nèi)容,為了實現(xiàn)源碼級調(diào)試,利用目標文件中在程序編譯鏈接時生成的調(diào)試信息來實現(xiàn)目標程序與源程序之間的映射,從而在源碼級實現(xiàn)對程序執(zhí)行情況的控制和觀察。其關(guān)鍵在于找到調(diào)試控制點和數(shù)據(jù)在源程序與目標程序之間的映射關(guān)系。

          任何數(shù)據(jù)都有名和值兩個側(cè)面,數(shù)據(jù)名與數(shù)據(jù)值之間的映射關(guān)系為:根據(jù)數(shù)據(jù)名得到存放該數(shù)據(jù)值的內(nèi)存地址,再從目標機的內(nèi)存地址取出其內(nèi)容即為數(shù)據(jù)值,如圖1所示:

          調(diào)試中的程序控制點通常為源程序中的函數(shù)、語句行等,它們對應(yīng)于裝載到目標內(nèi)存中的相應(yīng)目標代碼,要實現(xiàn)程序的運行控制關(guān)鍵在于得到源代碼與目標代碼之間的映射關(guān)系:由源碼定位信息得到相應(yīng)的目標碼信息;由目標碼地址得到相應(yīng)的源碼定位信息。源碼定位信息為源文件名+行號或函數(shù)名;目標碼信息為目標指令在目標機內(nèi)存中的起始和終止地址。兩者關(guān)系如圖2所示。

          嵌入式軟件以宿主機/目標機模式開發(fā),其交叉調(diào)試器分為宿主機部分和目標機部分,兩者以統(tǒng)一的通訊協(xié)議進行通信,宿主機向目標機發(fā)送命令,目標機接收、執(zhí)行命令并將結(jié)果返回宿主機,從而實現(xiàn)兩機之間的交互控制。免費軟件基金會FSF提供的調(diào)試工具gdb具有一套比較成熟的通訊協(xié)議----remote通訊協(xié)議,該協(xié)議作為開放軟件被廣為采用,在此我們選擇了rmote協(xié)議作為交叉調(diào)試器的遠程通訊協(xié)議。

          3 ELF格式目標文件

          目標文件是實現(xiàn)源碼級調(diào)試的基礎(chǔ),需要詳細分析文件的格式及內(nèi)容以從中獲取有用的調(diào)試信息。在設(shè)計調(diào)試器時采用可執(zhí)行連接格式――ELF格式目標文件作為開發(fā)基礎(chǔ),ELF(Executable and Linking Format)是UNIX系統(tǒng)實驗室(USL)作為應(yīng)用程序二進制接口(Application Binary Interface(ABI))而開發(fā)和發(fā)布的,已被軟件業(yè)廣泛采用,在Linux系統(tǒng)中ELF格式是其默認的目標文件格式,許多嵌入式軟件都采用ELF 格式作為目標文件格式。

          ELF目標文件主要有三種類型:可重定位文件,可執(zhí)行文件,共享的目標文件,我們以可執(zhí)行文件為分析對象。

            ELF文件格式如圖3所示:

          ELF頭固定在文件的起始位置,其它各部分的位置由ELF頭及其它相關(guān)信息獲得。

          1、ELF頭

          ELF頭是整個文件的入口,具有固定的長度,52個字節(jié),包含14個值。包括ELF文件標識,程序頭表和節(jié)頭表的位置、長度,文件中段的數(shù)目和節(jié)的數(shù)目等信息。


          上一頁 1 2 3 下一頁

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();