一種定位非法地址的裝置以及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實(shí)施例涉及計(jì)算機(jī)內(nèi)存檢測(cè)技術(shù),尤其涉及一種定位非法地址的裝置以及方法。
【背景技術(shù)】
[0002]在中央處理器(英文全稱:Central Processing Unit,英文縮寫:CPU)內(nèi)部具有高速存儲(chǔ)器,包括高速緩沖存儲(chǔ)器(英文全稱:cache)以及寫入緩沖器(英文全稱:WriteBuffer) o Cache中保存著最近一段時(shí)間被CPU使用過(guò)的內(nèi)存數(shù)據(jù),而Write Buffer則用于應(yīng)對(duì)內(nèi)存的寫入操作,將原本需要寫入內(nèi)存的數(shù)據(jù)暫時(shí)寫入Write Buffer中,等CPU空閑的時(shí)候,數(shù)據(jù)才會(huì)移至內(nèi)存中。
[0003]引入Write Buffer部件是為了在CPU有計(jì)算結(jié)果需要存儲(chǔ)時(shí)更好地提高寫入的速度,在Cache并行的位置增加Write Buffer可以將慢速的串行傳輸數(shù)據(jù)轉(zhuǎn)化為并行傳輸數(shù)據(jù)。在引入Write Buffer部件之后,雖然CPU寫入的速度得到了提升,但是由于CPU為了并行處理是不等待寫入指令的響應(yīng)的,如果CPU寫了非法地址,等總線返回寫入異常的時(shí)候,此時(shí)的程序上下文已經(jīng)不是寫入異常的現(xiàn)場(chǎng)了。這樣就會(huì)給定位非法地址帶來(lái)很大的挑戰(zhàn)。
[0004]目前,有一種非法內(nèi)存讀寫的檢測(cè)方法,應(yīng)用于CPU中含有內(nèi)存管理單元(英文全稱:Memory Management Unit,英文縮寫:MMU)的嵌入式系統(tǒng)平臺(tái)??梢詫⑨槍?duì)非法內(nèi)存讀寫的異常處理程序掛到數(shù)據(jù)存取違背存取權(quán)限的異常向量處。設(shè)定需要監(jiān)控的內(nèi)存、合法任務(wù)及對(duì)非法訪問(wèn)的處理方式,并在內(nèi)存所在頁(yè)設(shè)置為不可讀或/及寫,當(dāng)有程序指令訪問(wèn)到設(shè)置了讀寫保護(hù)的頁(yè)時(shí),產(chǎn)生數(shù)據(jù)存取違背存取權(quán)限的異常,CPU自動(dòng)跳到所述異常處理程序中;在異常處理程序中判斷該指令讀寫的是需要監(jiān)控的內(nèi)存且讀寫該內(nèi)存的指令不是合法任務(wù)時(shí),根據(jù)設(shè)置的對(duì)非法訪問(wèn)的處理方式記錄和處理,結(jié)束;否則正常讀寫內(nèi)存,完成后跳出異常處理程序,回到正常的程序中去。以此可以方便地實(shí)現(xiàn)對(duì)非法內(nèi)存讀寫的實(shí)時(shí)檢測(cè)。
[0005]然而在現(xiàn)有技術(shù)中,必須依賴于系統(tǒng)攜帶的MMU,與此同時(shí),在某些MMU做了頁(yè)表映射,但是實(shí)際上沒(méi)有寫入權(quán)限的場(chǎng)景下,無(wú)法觸發(fā)MMU異常,但是寫地址的時(shí)候還是會(huì)導(dǎo)致CPU異常。這是由于經(jīng)過(guò)了 Write Buffer部件之后,CPU為了并行處理是不等待寫入指令的響應(yīng)的,若CPU寫了非法地址,等總線返回寫入異常的時(shí)候,此時(shí)的程序上下文已經(jīng)不是寫入異常的現(xiàn)場(chǎng)了。就會(huì)難以定位非法地址出現(xiàn)的位置。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實(shí)施例提供了一種定位非法地址的裝置以及方法,當(dāng)出現(xiàn)目標(biāo)指令的非法地址時(shí),確定目標(biāo)指令的非法地址所對(duì)應(yīng)的目標(biāo)指令的信息,以獲取目標(biāo)指令的位置,引入指令跟蹤模塊可用于記錄指令操作的信息,并且將指令跟蹤模塊與數(shù)據(jù)跟蹤模塊進(jìn)行關(guān)聯(lián),從而可以準(zhǔn)確的定位非法地址出現(xiàn)的位置。
[0007]有鑒于此,本發(fā)明第一方面提供一種定位非法地址的裝置,所述裝置應(yīng)用于基帶處理芯片,所述裝置部署有指令跟蹤Ptrace模塊以及數(shù)據(jù)跟蹤Dtrace模塊,所述裝置包括:
[0008]所述Ptrace模塊用于記錄指令的信息,所述指令的信息包括第一關(guān)聯(lián)值;
[0009]所述Dtrace模塊用于記錄指令操作的信息,所述指令操作的信息包括第二關(guān)聯(lián)值;
[0010]所述裝置還包括關(guān)聯(lián)模塊以及定位模塊;
[0011]所述關(guān)聯(lián)模塊用于根據(jù)所述第一關(guān)聯(lián)值與所述第二關(guān)聯(lián)值,建立所述指令的信息與所述指令操作的信息之間的關(guān)聯(lián)關(guān)系;
[0012]所述定位模塊用于當(dāng)出現(xiàn)目標(biāo)指令的非法地址時(shí),根據(jù)所述指令的信息與所述指令操作的信息之間的關(guān)聯(lián)關(guān)系,確定所述目標(biāo)指令的非法地址所對(duì)應(yīng)的所述目標(biāo)指令的信息,并通過(guò)所述目標(biāo)指令的信息確定所述目標(biāo)指令的位置。
[0013]結(jié)合本發(fā)明實(shí)施例的第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述第一關(guān)聯(lián)值為所述指令的信息對(duì)應(yīng)的時(shí)間戳,所述第二關(guān)聯(lián)值為所述指令操作的信息對(duì)應(yīng)的時(shí)間戳。
[0014]結(jié)合本發(fā)明實(shí)施例的第一方面,在第二種可能的實(shí)現(xiàn)方式中,所述第一關(guān)聯(lián)值為所述指令的信息對(duì)應(yīng)的序號(hào),所述第二關(guān)聯(lián)值為所述指令操作的信息對(duì)應(yīng)的序號(hào)。
[0015]結(jié)合本發(fā)明實(shí)施例的第一方面、第一方面第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述定位模塊具體用于根據(jù)所述指令的信息與所述指令操作的信息之間的關(guān)聯(lián)關(guān)系,確定所述目標(biāo)指令的非法地址所對(duì)應(yīng)的所述第二關(guān)聯(lián)值;
[0016]根據(jù)所述第二關(guān)聯(lián)值確定所述第一關(guān)聯(lián)值,并通過(guò)所述第一關(guān)聯(lián)值對(duì)應(yīng)的所述目標(biāo)指令的信息確定所述目標(biāo)指令的位置。
[0017]結(jié)合本發(fā)明實(shí)施例的第一方面、第一方面第一種或第二種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述定位模塊具體還用于根據(jù)所述目標(biāo)指令的信息以及程序中的反匯編信息確定所述目標(biāo)指令的位置。
[0018]本發(fā)明第二方面提供一種定位非法地址的方法,所述方法應(yīng)用于定位非法地址的裝置,所述定位非法地址的裝置部署有指令跟蹤Ptrace模塊以及數(shù)據(jù)跟蹤Dtrace模塊,所述方法包括:
[0019]記錄指令的信息,所述指令的信息包括第一關(guān)聯(lián)值;
[0020]記錄指令操作的信息,所述指令操作的信息包括第二關(guān)聯(lián)值;
[0021]根據(jù)所述第一關(guān)聯(lián)值與所述第二關(guān)聯(lián)值,建立所述指令的信息與所述指令操作的信息之間的關(guān)聯(lián)關(guān)系;
[0022]當(dāng)出現(xiàn)目標(biāo)指令的非法地址時(shí),根據(jù)所述指令的信息與所述指令操作的信息之間的關(guān)聯(lián)關(guān)系,確定所述目標(biāo)指令的非法地址所對(duì)應(yīng)的所述目標(biāo)指令的信息,并通過(guò)所述目標(biāo)指令的信息確定所述目標(biāo)指令的位置。
[0023]結(jié)合本發(fā)明實(shí)施例的第二方面,在第一種可能的實(shí)現(xiàn)方式中,所述第一關(guān)聯(lián)值為所述指令的信息對(duì)應(yīng)的時(shí)間戳,所述第二關(guān)聯(lián)值為所述指令操作的信息對(duì)應(yīng)的時(shí)間戳。
[0024]結(jié)合本發(fā)明實(shí)施例的第二方面,在第二種可能的實(shí)現(xiàn)方式中,所述第一關(guān)聯(lián)值為所述指令的信息對(duì)應(yīng)的序號(hào),所述第二關(guān)聯(lián)值為所述指令操作的信息對(duì)應(yīng)的序號(hào)。
[0025]結(jié)合本發(fā)明實(shí)施例的第二方面、第二方面第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述指令的信息與所述指令操作的信息之間的關(guān)聯(lián)關(guān)系,確定所述目標(biāo)指令的非法地址所對(duì)應(yīng)的所述目標(biāo)指令的信息,并通過(guò)所述目標(biāo)指令的信息確定所述目標(biāo)指令的位置,包括:
[0026]根據(jù)所述指令的信息與所述指令操作的信息之間的關(guān)聯(lián)關(guān)系,確定所述目標(biāo)指令的非法地址所對(duì)應(yīng)的所述第二關(guān)聯(lián)值;
[0027]根據(jù)所述第二關(guān)聯(lián)值確定所述第一關(guān)聯(lián)值,并通過(guò)所述第一關(guān)聯(lián)值對(duì)應(yīng)的所述目標(biāo)指令的信息確定所述目標(biāo)指令的位置。
[0028]結(jié)合本發(fā)明實(shí)施例的第一方面、第一方面第一種或第二種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述通過(guò)所述目標(biāo)指令的信息確定所述目標(biāo)指令的位置,包括:
[0029]根據(jù)所述目標(biāo)指令的信息以及程序中的反匯編信息確定所述目標(biāo)指令的位置。
[0030]從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):
[0031]本發(fā)明實(shí)施例中,在定位非法地址的裝置中部署Ptrace模塊以及Dtrace模塊,并通過(guò)Ptrace模塊中記錄的第一關(guān)聯(lián)值與Dtrace模塊記錄的第二關(guān)聯(lián)值,將Ptrace模塊與Dtrace模塊之間的信息進(jìn)行關(guān)聯(lián)。當(dāng)出現(xiàn)目標(biāo)指令的非法地址時(shí),確定目標(biāo)指令的非法地址所對(duì)應(yīng)的目標(biāo)指令的信息,以獲取目標(biāo)指令的位置,引入Dtrace模塊可用于記錄指令操作的信息,并且將Ptrace模塊與Dtrace模塊進(jìn)行關(guān)聯(lián),從而可以準(zhǔn)確的定位非法地址出現(xiàn)的位置。
【附圖說(shuō)明】
[0032]圖1為本發(fā)明實(shí)施例中提供的定位非法地址的裝置示意圖;
[0033]圖2為本發(fā)明實(shí)施例中定位非法地址的方法一個(gè)實(shí)施例示意圖;
[0034]圖3為本發(fā)明實(shí)施例中定位非法地址的流程示意圖;
[0035]圖4為本發(fā)明實(shí)施例中定位非法地址的裝置一個(gè)結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0036]下面將結(jié)合本實(shí)施例中的附圖,對(duì)本實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施