更新時(shí)間:2022-08-26 來(lái)源:黑馬程序員 瀏覽量:
目標(biāo)代碼插樁是指向目標(biāo)代碼(二進(jìn)制代碼)插入測(cè)試代碼獲取程序運(yùn)行信息的測(cè)試方法,也稱(chēng)為動(dòng)態(tài)程序分析方法。再進(jìn)行目標(biāo)代碼插樁之前,測(cè)試人員要對(duì)目標(biāo)代碼邏輯結(jié)構(gòu)進(jìn)行分析,從而確認(rèn)需要插樁的位置。
目標(biāo)代碼插樁對(duì)程序運(yùn)行時(shí)的內(nèi)存監(jiān)控、指令跟蹤、錯(cuò)誤檢測(cè)等有著重要的意義。相比于邏輯覆蓋法,目標(biāo)代碼插樁在測(cè)試過(guò)程中不需要代碼重新編譯或鏈接程序,并且目標(biāo)代碼的格式和具體的編程語(yǔ)言無(wú)關(guān),主要和操作系統(tǒng)相關(guān),因此目標(biāo)代碼插樁有著廣泛的使用。
1.目標(biāo)代碼插樁的原理
目標(biāo)代碼插樁法的原理是在程序運(yùn)行平臺(tái)和底層操作系統(tǒng)之間建立中間層,通過(guò)中間層檢查執(zhí)行程序、修改指令,開(kāi)發(fā)人員、軟件分析工程師等對(duì)運(yùn)行的程序進(jìn)行觀察,判斷程序是否被惡意攻擊或者出現(xiàn)異常行為,從而提高程序的整體質(zhì)量。
2.目標(biāo)代碼插樁法的執(zhí)行模式
由于目標(biāo)代碼是可執(zhí)行的二進(jìn)制程序,因此目標(biāo)代碼的插樁可分為兩種情況:一種是對(duì)未運(yùn)行的目標(biāo)代碼插樁,從頭到尾插入測(cè)試代碼,然后執(zhí)行程序。這種方式適用于需要實(shí)現(xiàn)完整系統(tǒng)或仿真時(shí)進(jìn)行的代碼覆蓋測(cè)試。另一種情況是向正在運(yùn)行的程序插入測(cè)試代碼,用來(lái)檢測(cè)程序在特定時(shí)間的運(yùn)行狀態(tài)信息。
目標(biāo)代碼插樁具有以下3種執(zhí)行模式。
(1)即時(shí)模式(Just-In-Time):原始的二進(jìn)制或可執(zhí)行文件沒(méi)有被修改或執(zhí)行,將修改部分的二進(jìn)制代碼生成文件副本存儲(chǔ)在新的內(nèi)存區(qū)域中,在測(cè)試時(shí)僅執(zhí)行修改部分的目標(biāo)代碼。
(2)解釋模式(Interpretation Mode):在解釋模式中目標(biāo)代碼被視為數(shù)據(jù),測(cè)試人員插入的測(cè)試代碼作為目標(biāo)代碼指令的解釋語(yǔ)言,每當(dāng)執(zhí)行一條目標(biāo)代碼指令,程序就會(huì)在測(cè)試代碼中查找并執(zhí)行相應(yīng)的替代指令,測(cè)試通過(guò)替代指令的執(zhí)行信息就可以獲取程序的運(yùn)行信息。
(3)探測(cè)模式(Probe Mode):探測(cè)模式使用新指令覆蓋舊指令進(jìn)行測(cè)試,這種模式在某些體系結(jié)構(gòu)(如x86)中比較好用。