<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è) > 嵌入式系統 > 設計應用 > MIPS系統異?,F場(chǎng)分析工具的設計與實(shí)現

MIPS系統異?,F場(chǎng)分析工具的設計與實(shí)現

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

是一款RISC體系結構的中央處理器,在嵌入式應用的場(chǎng)合,和ARM一樣,核作為IP授權給各集成電路設計廠(chǎng)商根據自己的特定應用生產(chǎn)專(zhuān)用的SOC(single on chip)解決方案。

本文引用地址:http://dyxdggzs.com/article/201609/304029.htm

為節省成本,很多嵌入的SOC實(shí)現,省掉了MIPS的J—TAG支持;或者應用MIPS核的系統,在形成產(chǎn)品應用到實(shí)際環(huán)境時(shí),才出現死機等情況。無(wú)論哪種情況,都使得要解決遇到的死機問(wèn)題變得非常困難。

1 處理機制

任何一個(gè)CPU都要提供一個(gè)詳細的和中斷處理機制。一個(gè)軟件系統,如操作系統,就是一個(gè)時(shí)序邏輯系統,通過(guò)時(shí)鐘,外部事件來(lái)驅動(dòng)整個(gè)預先定義好的邏輯行為。本文通過(guò)設計工具載入異常內存數據(dump),然后進(jìn)行反匯編,得到系統發(fā)生異常情況,定位異常所在位置及引起異常的調用堆棧,反序列出函數調用清單。

2 工具設計與實(shí)現

2.1 設計思路及流程

產(chǎn)品軟件在工作中,引起死機的原因,一般是非法指令或指令訪(fǎng)問(wèn)了非法地址。而這類(lèi)非法訪(fǎng)問(wèn),在支持虛擬地址的CPU體系中,都會(huì )引起系統的指令異常,從而進(jìn)入異常服務(wù)程序。該工具根據異常的堆棧數據,配合整個(gè)程序空間的指令,列出引起死機問(wèn)題的有效指令(引起異常的指令地址和函數調用返回的地址)的調用序列。從而避免到處懷疑代碼,加入各種觀(guān)察代碼勞心費力的抓取死機現象來(lái)解決問(wèn)題這種低效的方式。該工具對其他的硬件原因引起的死機問(wèn)題,不在分析之列。流程圖如圖1。

MIPS系統異?,F場(chǎng)分析工具的設計與實(shí)現

2.2 設計準備

1)在發(fā)布系統程序前,確保系統中異常服務(wù)程序,處于活動(dòng)狀態(tài);異常服務(wù)程序中,對于數據和指令引起的異常,要輸出(dump)引起異常任務(wù)當時(shí)的堆棧數據。

2)發(fā)布系統程序時(shí),保留源碼和系統對應的反匯編代碼備用。

3)在系統運行過(guò)程中,保持對系統串口的接收就緒狀態(tài),一旦系統發(fā)生異常引起死機,將接收的數據保存到文件(即所指的serial.log文件)。

2.3 反匯編解析

1)復制腳本文件disassemble.sh到ygwinsrcgnutoolsmipsisa32-elfbin目錄下。

2)打開(kāi)Cygwin,在命令行運行disassemble.shOBERON.elf,生成OBERON.elf.lst文件。如圖2。

MIPS系統異?,F場(chǎng)分析工具的設計與實(shí)現

3)運行MStarAnaWexe軟件,在反匯編文件欄添加OBERONelf.list文件,在輸出記錄欄添加serial.log文件,如圖3。

MIPS系統異?,F場(chǎng)分析工具的設計與實(shí)現

4)添加serial.log文件之后系統自動(dòng)切換到檢查堆棧信息界面,如圖4。

2.4 堆棧分析

1)一般情況下,本工具自動(dòng)完成結果,在屏幕上依次顯示堆棧調用情況,前面的是被調用函數,后面的是調用者。

2)在分析過(guò)程中,可能會(huì )需要使用者輸入兩個(gè)參數,這時(shí)需要使用這根據輸出結果分析匯編代碼,輸入正確的值這兩個(gè)值一個(gè)是匯編函數的返回地址所在的對邊偏移,一個(gè)是本函數的堆棧使用情況。返回地址要查看兩個(gè)相關(guān)的匯編代碼,“jr ra”即為函數返回指令,與之相關(guān)的另一條指令為“swra,xx(sp)”,“lw ra,xx(sp)”,前者是將ra寄存器的值保存到以sp為基址偏移為xx的堆棧中,后者從以sp為基址偏移xx的堆棧中取得數據載入ra寄存器。因此只需要從其中任意一個(gè)指令都能得到返回地址在堆棧中的偏移當一個(gè)函數中有兩個(gè)以上的單向改變sp內容的指令出現以后,本工具就無(wú)法推算出正確的函數占用堆棧情況了,此時(shí)需要使用者閱讀匯編代碼,輸入正確的值。一般這類(lèi)指令為

“addi sp,sp,-xx”,“addiu sp,sp,-xx”,“addiu sp,reg,mm”,只要sp跟在指令后面,那就有可能是改變了堆?;羔?。然后根據從函數開(kāi)始到調用(屏幕上)上一個(gè)函數出現的位置,將其偏移值累加,相應的,“sw ra,xx(sp)”后面出現的sp變化值也要累加到返回值偏移上去。

3)就圖3而言,在堆棧指針偏移欄中輸入40,在返回地址基于堆棧指針的偏移欄中輸入32,然后確定,就會(huì )自動(dòng)跳轉到如圖5。

MIPS系統異?,F場(chǎng)分析工具的設計與實(shí)現

4)同樣在相應的選項中輸入對應的指針偏移量之后,確定。得到如圖6。

5)堆棧分析完成,死機的情況是由于圖5中的5個(gè)函數(最后倆個(gè)去除)引起。

6)可拷貝函數之前的地址(如:_Zapper_Signal函數的地址是80041e98)到OBERON.elf.lst文件查找對應的匯編運行代碼,如圖7。

MIPS系統異?,F場(chǎng)分析工具的設計與實(shí)現

7)依以上步驟查看導致錯誤的匯編代碼或者在工程文件中對應函數加入調試,查看代碼中存在那些錯誤。

3 結束語(yǔ)

正確快速查找出現的異常并能快速分析解決軟件健壯性和穩定性的關(guān)鍵問(wèn)題,該工具在滿(mǎn)足以上條件的同時(shí),實(shí)現如MIPS指令模擬器、MIPS斷點(diǎn)調試等功能的擴展,具有比較強的推廣性。



評論


相關(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>