欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種內(nèi)核調(diào)試的方法和設(shè)備的制作方法

文檔序號(hào):6370758閱讀:210來源:國知局
專利名稱:一種內(nèi)核調(diào)試的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及網(wǎng)絡(luò)安全領(lǐng)域,尤其涉及一種內(nèi)核調(diào)試的方法和設(shè)備。
背景技術(shù)
調(diào)試是軟件開發(fā)和軟件分析中一個(gè)必不可少的環(huán)節(jié),相對(duì)于應(yīng)用系統(tǒng)的開發(fā)和分析也同樣如此。但是,Linux系統(tǒng)的開發(fā)者為了保證Linux內(nèi)核代碼的正確性,沒有在Linux內(nèi)核源代碼中編入調(diào)試器,使得對(duì)Linux系統(tǒng)的內(nèi)核進(jìn)行調(diào)試一直是該領(lǐng)域一個(gè)相對(duì)棘手的問題。為了解決Linux系統(tǒng)中內(nèi)核代碼的調(diào)試問題,出現(xiàn)了三種調(diào)試方法 第一種調(diào)試方法printk ()打印信息方法。這種方法主要是通過在Iinux系統(tǒng)的內(nèi)核代碼中特定位置加入printk ()函數(shù),并通過printk ()函數(shù)調(diào)用將相關(guān)的內(nèi)核信息打印在屏幕上或者通過日志輸出,通常這種方式結(jié)合Kprobes使用。第二種調(diào)試方式使用KGDB搭建的Iinux系統(tǒng)的內(nèi)核調(diào)試環(huán)境。這種方法像調(diào)試普通的應(yīng)用程序一樣,在Iinux系統(tǒng)內(nèi)核中執(zhí)行設(shè)置斷點(diǎn)、檢查變量值、單步跟蹤程序運(yùn)行等操作。在使用KGDB調(diào)試Iinux系統(tǒng)內(nèi)核時(shí),需要兩臺(tái)機(jī)器,一臺(tái)作為開發(fā)機(jī),另一臺(tái)作為目標(biāo)機(jī),兩臺(tái)機(jī)器之間通過串口或者以太網(wǎng)相連,將目標(biāo)Iinux系統(tǒng)內(nèi)核安裝在虛擬機(jī)中,進(jìn)行調(diào)試。第三種調(diào)試方式使用SkyEye搭建的Iinux系統(tǒng)的內(nèi)核調(diào)試環(huán)境。這樣方式下,SkyEye是一個(gè)開源軟件項(xiàng)目,目標(biāo)是在通用的Linux系統(tǒng)和Window系統(tǒng)平臺(tái)上模擬常見的嵌入式計(jì)算機(jī)系統(tǒng),實(shí)現(xiàn)一個(gè)指令級(jí)的硬件模擬平臺(tái),可模擬多種嵌入式開發(fā)板,支持多種CUP指令集,利用GUN的⑶B項(xiàng)目,把⑶B和ARM結(jié)合起來,進(jìn)行Iinux系統(tǒng)的內(nèi)核調(diào)試。上述三種Iinux系統(tǒng)內(nèi)核調(diào)試方法,各存在其缺陷第一種方式通過printkO打印信息來調(diào)試Linux系統(tǒng)的內(nèi)核。在需要對(duì)Linux系統(tǒng)內(nèi)核源碼進(jìn)行改寫時(shí),在能夠改寫源碼的編譯環(huán)境下比較實(shí)用,但是對(duì)于已經(jīng)編譯完成且不能修改源碼的Linux內(nèi)核,則不能使用該方法通常這種方法被看作是一種代碼錯(cuò)誤跟蹤技術(shù),不能為源碼級(jí)的Linux系統(tǒng)的內(nèi)核進(jìn)行調(diào)試。第二種方式通過KGDB內(nèi)核調(diào)試方法來調(diào)試Linux系統(tǒng)的內(nèi)核。需要在內(nèi)核編譯時(shí)編譯一些配置,由于低版本Linux系統(tǒng)的內(nèi)核中不具備這些配置信息,將不支持該調(diào)試方法;但是該方法在被使用時(shí)由于Linux系統(tǒng)內(nèi)核配置信息較復(fù)雜,不能對(duì)內(nèi)核進(jìn)行全程調(diào)試;也不能應(yīng)用于系統(tǒng)開始的初始化引導(dǎo)過程的調(diào)試。第三種方式通過SkyEye來調(diào)試Linux系統(tǒng)的內(nèi)核。目前SkyEye主要支持基于ARM內(nèi)核的系統(tǒng),對(duì)于非ARM架構(gòu)下編譯的系統(tǒng)內(nèi)核不能進(jìn)行調(diào)試,存在使用的局限性。綜上所述,采用上述調(diào)試方法對(duì)Linux內(nèi)核進(jìn)行調(diào)試跟蹤存在調(diào)試方式復(fù)雜和調(diào)試效率低的問題
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供了一種內(nèi)核調(diào)試的方法和設(shè)備,用于解決現(xiàn)有技術(shù)中對(duì)Linux內(nèi)核進(jìn)行調(diào)試跟蹤存在調(diào)試方式復(fù)雜和調(diào)試效率低的問題。一種內(nèi)核調(diào)試的方法,所述方法包括判斷待調(diào)試的內(nèi)核信息是否存在映射文件信息;若存在,則確定該待調(diào)試的內(nèi)核信息對(duì)應(yīng)的映射文件信息,并對(duì)該映射文件信息中的指令信息進(jìn)行調(diào)試;否則,確定該待調(diào)試的內(nèi)核信息的參考內(nèi)核信息,并將參考內(nèi)核信息中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,得到待調(diào)試的內(nèi)核信息中各函數(shù)的調(diào)用地址;將待調(diào)試的內(nèi)核信息中各函數(shù)以及函數(shù)的調(diào)用地址作為待調(diào)試的內(nèi)核信息的映射文件信息,并對(duì)該映射文件信息中的指令信息進(jìn)行調(diào)試。
一種內(nèi)核調(diào)試設(shè)備,所述設(shè)備包括判斷模塊,用于判斷待調(diào)試的內(nèi)核信息是否存在映射文件信息;確定映射文件信息模塊,用于在判斷結(jié)果為存在映射文件信息時(shí),確定該待調(diào)試的內(nèi)核信息對(duì)應(yīng)的映射文件信息;確定調(diào)用地址模塊,用于在判斷結(jié)果為不存在映射文件信息時(shí),確定該待調(diào)試的內(nèi)核信息的參考內(nèi)核信息,并將參考內(nèi)核信息中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,得到待調(diào)試的內(nèi)核信息中各函數(shù)的調(diào)用地址;生成映射文件信息模塊,用于將待調(diào)試的內(nèi)核信息中各函數(shù)以及函數(shù)的調(diào)用地址作為待調(diào)試的內(nèi)核信息的映射文件信息;內(nèi)核調(diào)試模塊,用于對(duì)映射文件信息中的指令信息進(jìn)行調(diào)試。本發(fā)明有益效果如下本發(fā)明實(shí)施例在確定沒有映射文件信息時(shí),根據(jù)確定的參考內(nèi)核的映射文件信息,確定待調(diào)試的內(nèi)核信息中各函數(shù)以及函數(shù)的調(diào)用地址,生成待調(diào)試的內(nèi)核信息的映射文件信息,并對(duì)該映射文件信息中的指令信息進(jìn)行調(diào)試;在確定有映射文件信息時(shí),直接對(duì)映射文件信息中的指令信息進(jìn)行調(diào)試,避免了現(xiàn)有技術(shù)中對(duì)Linux內(nèi)核進(jìn)行調(diào)試跟蹤存在調(diào)試方式復(fù)雜和調(diào)試效率低的問題,提高了 Linux內(nèi)核調(diào)試的效率和降低了 Linux內(nèi)核調(diào)試的難度。


圖I為本發(fā)明實(shí)施例一的一種內(nèi)核調(diào)試的方法的流程示意圖;圖2為本發(fā)明實(shí)施例二的一種內(nèi)核調(diào)試的方法的流程示意圖;圖3為獲取待調(diào)試的內(nèi)核信息的系統(tǒng)版本信息的流程示意圖;圖4為生成一個(gè)函數(shù)調(diào)用樹的結(jié)構(gòu)示意圖;圖5為本實(shí)施例三的一種內(nèi)核調(diào)試設(shè)備的結(jié)構(gòu)示意圖;圖6為QEMU調(diào)試系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施例方式為了實(shí)現(xiàn)本發(fā)明的目的,本發(fā)明實(shí)施例提供了一種內(nèi)核調(diào)試的方法和設(shè)備,通過判斷待調(diào)試的內(nèi)核信息是否存在映射文件信息;針對(duì)存在映射文件信息的,確定該待調(diào)試的內(nèi)核信息對(duì)應(yīng)的映射文件信息,并對(duì)該映射文件信息中的指令信息進(jìn)行調(diào)試;針對(duì)不存在映射文件信息的,確定該待調(diào)試的內(nèi)核信息的參考內(nèi)核信息,并將參考內(nèi)核信息中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,得到待調(diào)試的內(nèi)核信息中各函數(shù)的調(diào)用地址,將待調(diào)試的內(nèi)核信息中各函數(shù)以及函數(shù)的調(diào)用地址作為待調(diào)試的內(nèi)核信息映射文件信息;對(duì)映射文件信息中的指令信息進(jìn)行調(diào)試。與現(xiàn)有技術(shù)相比,通過確定待調(diào)試的內(nèi)核信息的映射文件信息,其中,映射文件信息中包含了待調(diào)試的內(nèi)核信息中每一函數(shù)以及每一函數(shù)的調(diào)用地址,對(duì)確定的映射文件信息進(jìn)行調(diào)試,避免了現(xiàn)有技術(shù)中對(duì)Linux內(nèi)核進(jìn)行調(diào)試跟蹤存在調(diào)試方式復(fù)雜和調(diào)試效率低的問題,提高了 Linux內(nèi)核調(diào)試的效率和降低了 Linux內(nèi)核調(diào)試的難度。
下面結(jié)合說明書附圖對(duì)本發(fā)明各實(shí)施例中的內(nèi)容進(jìn)行詳細(xì)描述。實(shí)施例一如圖I所示,為本發(fā)明實(shí)施例一的一種內(nèi)核調(diào)試的方法的流程示意圖。所述方法包括步驟101 :判斷待調(diào)試的內(nèi)核信息是否存在映射文件信息,若是,則執(zhí)行步驟104 ;若否,則執(zhí)行步驟102。在本步驟101中,由于在對(duì)Linux內(nèi)核進(jìn)行調(diào)試時(shí),待調(diào)試的內(nèi)核信息分為兩種一種是待調(diào)試的內(nèi)核信息中每一函數(shù)以及每一函數(shù)的調(diào)用地址是知道的,即有系統(tǒng)函數(shù)調(diào)用地址;另一種是待調(diào)試的內(nèi)核信息中每一函數(shù)以及每一函數(shù)的調(diào)用地址是不知道的,即無系統(tǒng)函數(shù)調(diào)用地址。其中,對(duì)于有系統(tǒng)函數(shù)調(diào)用地址的待調(diào)試的內(nèi)核信息,在Linux內(nèi)核編譯完成后,會(huì)生成一個(gè)System, map的內(nèi)核符號(hào)映射文件,該文件記錄了待調(diào)試的內(nèi)核信息的全局函數(shù)或變量在加載進(jìn)內(nèi)存后的調(diào)用地址。通過該System, map記錄的地址,可以在對(duì)待調(diào)試的內(nèi)核信息在啟動(dòng)運(yùn)行階段對(duì)相應(yīng)的函數(shù)進(jìn)行符號(hào)斷點(diǎn),比較有利于后續(xù)的調(diào)試工作。對(duì)于無系統(tǒng)函數(shù)調(diào)用地址的待調(diào)試的內(nèi)核信息,由于在此種情況下,內(nèi)核分析者只有一個(gè)單獨(dú)的包含了待調(diào)試的內(nèi)核信息的磁盤鏡像文件或者內(nèi)核壓縮鏡像,沒有System, map或者vmlinuz等輔助調(diào)試分析資料,不能獲得對(duì)應(yīng)的內(nèi)核符號(hào)信息,為內(nèi)核分析人員在對(duì)待調(diào)試的內(nèi)核進(jìn)行調(diào)試時(shí),需要花費(fèi)大量的時(shí)間來確定待調(diào)試的內(nèi)核信息中相應(yīng)函數(shù)的符號(hào)加載地址。所述映射文件信息是指包含了內(nèi)核信息的每一函數(shù)以及每一函數(shù)的調(diào)用地址,可以是System, map,也可以是內(nèi)核符號(hào)映射文件,這里不做具體限定。需要說明的是,本發(fā)明方案中涉及的待調(diào)試的內(nèi)核信息可以是Linux系統(tǒng)的內(nèi)核代碼組成的內(nèi)核信息,也可以是類Linux系統(tǒng)的內(nèi)核代碼組成的內(nèi)核信息,這里不做具體限定。步驟102 :確定該待調(diào)試的內(nèi)核信息的參考內(nèi)核信息,并將參考內(nèi)核信息中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,得到待調(diào)試的內(nèi)核信息中各函數(shù)的調(diào)用地址。在步驟102中,由于待調(diào)試的內(nèi)核信息沒有映射文件信息,因此,需要為該待調(diào)試的內(nèi)核信息生成一個(gè)映射文件信息。沒有映射文件信息的待調(diào)試的內(nèi)核信息就像個(gè)黑盒子,無法知道該待調(diào)試的內(nèi)核信息中每一函數(shù)加載在內(nèi)存中的可調(diào)用地址,因此,通過以下方式確定待調(diào)試的內(nèi)核信息的各函數(shù)的調(diào)用地址第一步確定待調(diào)試的內(nèi)核信息的參考內(nèi)核信息。
第二步根據(jù)參考內(nèi)核信息的映射文件信息,確定參考內(nèi)核信息中每一函數(shù)以及每一函數(shù)的調(diào)用地址。第三步將確定的參考內(nèi)核信息中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,得到待調(diào)試的內(nèi)核信息中各函數(shù)的調(diào)用地址。步驟103 :將待調(diào)試的內(nèi)核信息中各函數(shù)以及函數(shù)的調(diào)用地址作為待調(diào)試的內(nèi)核信息映射的文件信息。在步驟103中,根據(jù)步驟102確定的待調(diào)試的內(nèi)核信息中每一函數(shù)的調(diào)用地址,將待調(diào)試的內(nèi)核信息中各函數(shù)以及函數(shù)的調(diào)用地址作為待調(diào)試的內(nèi)核的映射文件信息。步驟104 :對(duì)映射文件信息中的指令信息進(jìn)行調(diào)試。在步驟104中,在對(duì)映射文件信息中的指令信息進(jìn)行調(diào)試時(shí),需要翻譯映射文件信息中的每一條指令信息,因此,可采用讀取一條指令信息,對(duì)該指令信息進(jìn)行翻譯,并對(duì)翻譯后的指令信息進(jìn)行調(diào)試;當(dāng)該指令信息調(diào)試完成后,再讀取下一條指令信息,執(zhí)行翻譯和調(diào)試的操作,直至重復(fù)調(diào)試完映射文件信息中的所有指令信息。這樣不僅節(jié)省了調(diào)試系統(tǒng)的緩存資源,還提高了調(diào)試的準(zhǔn)確度,實(shí)現(xiàn)對(duì)Linux內(nèi)核的全程跟蹤調(diào)試。通過實(shí)施例一的方案,在確定沒有映射文件信息時(shí),根據(jù)確定的參考內(nèi)核的映射文件信息,確定待調(diào)試的內(nèi)核信息中各函數(shù)以及函數(shù)的調(diào)用地址,生成待調(diào)試的內(nèi)核信息的映射文件信息,并對(duì)該映射文件信息中的指令信息進(jìn)行調(diào)試;在確定有映射文件信息時(shí),直接對(duì)映射文件信息中的指令信息進(jìn)行調(diào)試,避免了現(xiàn)有技術(shù)中對(duì)Linux內(nèi)核進(jìn)行調(diào)試跟蹤存在調(diào)試方式復(fù)雜和調(diào)試效率低的問題,提高了 Linux內(nèi)核調(diào)試的效率和降低了 Linux內(nèi)核調(diào)試的難度。實(shí)施例二 如圖2所示,為本實(shí)施例二的一種內(nèi)核調(diào)試的方法的流程示意圖。本實(shí)施例二是對(duì)實(shí)施例一中步驟102的詳細(xì)描述。所述方法包括步驟201 :在調(diào)試環(huán)境下運(yùn)行待調(diào)試的內(nèi)核信息,確定待調(diào)試的內(nèi)核信息的版本號(hào)和函數(shù)編譯器。在步驟201中,由于不同版本的Linux內(nèi)核編譯后的內(nèi)核文件會(huì)存在差異,為了得到準(zhǔn)確度較高的待調(diào)試的內(nèi)核信息的映射文件信息,需要首先定位待調(diào)試的內(nèi)核信息的版本號(hào)和函數(shù)編譯器。但是,通常待調(diào)試的內(nèi)核信息是經(jīng)過內(nèi)核壓縮得到的內(nèi)核壓縮鏡像文件信息,在對(duì)內(nèi)核信息進(jìn)行調(diào)試時(shí),需要先獲取該待調(diào)試的內(nèi)核信息的版本號(hào)和函數(shù)編譯器,具體執(zhí)行以下操作,如圖3所示,為獲取待調(diào)試的內(nèi)核信息的系統(tǒng)版本信息的流程示意圖第一步需要先將該待調(diào)試的內(nèi)核信息運(yùn)行。第二步在待調(diào)試的內(nèi)核信息運(yùn)行的過程中,搜索與版本號(hào)相關(guān)的關(guān)鍵字信息,以及與函數(shù)編譯器相關(guān)的關(guān)鍵字信息。第三步根據(jù)搜索得到的關(guān)鍵字信息分別確定待調(diào)試的內(nèi)核信息的版本號(hào)和函數(shù)編譯器。需要說明的是,搜索的關(guān)鍵字彳目息可以是Linux和gcc。步驟202 :將與確定的版本號(hào)最接近的版本號(hào)對(duì)應(yīng)的內(nèi)核信息作為待調(diào)試的內(nèi)核信息的參考內(nèi)核信息。在步驟202中,由于接近的Linux版本的內(nèi)核編碼具有近似性,因此,可以根據(jù)步驟201確定的待調(diào)試的內(nèi)核信息的版本號(hào)和函數(shù)編譯器,將與確定的版本號(hào)最接近的版本號(hào)對(duì)應(yīng)的內(nèi)核信息作為待調(diào)試的內(nèi)核信息的參考內(nèi)核信息。步驟203 :針對(duì)參考內(nèi)核信息中的各函數(shù)執(zhí)行以下操作
將參考內(nèi)核信息中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,得到待調(diào)試的內(nèi)核信息中各函數(shù)的調(diào)用地址。具體地,得到待調(diào)試的內(nèi)核信息中各函數(shù)的調(diào)用地址,通過以下方式實(shí)現(xiàn)步驟2031 :利用確定的函數(shù)編譯器對(duì)參考內(nèi)核信息進(jìn)行分析,得到參考內(nèi)核信息中的函數(shù)調(diào)用樹,其中,任一函數(shù)調(diào)用樹的一個(gè)節(jié)點(diǎn)表示一個(gè)函數(shù),函數(shù)中的一段代碼作為該函數(shù)的特征碼。在步驟2031中,函數(shù)編譯器采用遞歸向下的分析方法,根據(jù)Linux內(nèi)核的控制流對(duì)參考內(nèi)核信息中的函數(shù)進(jìn)行解析,并記錄每一條內(nèi)核信息在運(yùn)行時(shí)的內(nèi)核指令。在解析的過程中,以參考內(nèi)核信息中各函數(shù)為單元,根據(jù)各函數(shù)之間的調(diào)用關(guān)系,生成一個(gè)函數(shù)調(diào)用樹,如圖4所示,為生成一個(gè)函數(shù)調(diào)用樹的結(jié)構(gòu)示意圖,其中,函數(shù)調(diào)用樹的每個(gè)節(jié)點(diǎn)都表示一個(gè)函數(shù),在這個(gè)節(jié)點(diǎn)上存儲(chǔ)該函數(shù)的調(diào)用參數(shù)、返回參數(shù)等信息,同時(shí)截取該函數(shù)的一段特征代碼作為該函數(shù)的特征碼。需要說明的是,所述調(diào)用關(guān)系可以是子調(diào)用樹、父調(diào)用點(diǎn)、兄弟調(diào)用點(diǎn)等。步驟2032 :利用確定的函數(shù)編譯器對(duì)待調(diào)試的內(nèi)核信息進(jìn)行分析,得到待調(diào)試的內(nèi)核信息中的函數(shù)調(diào)用樹,其中,任一函數(shù)調(diào)用樹的一個(gè)節(jié)點(diǎn)表示一個(gè)函數(shù),函數(shù)中的一段代碼作為該函數(shù)的特征碼。在步驟2032中,對(duì)待調(diào)試的內(nèi)核信息進(jìn)行分析的方式與步驟2031的方法相同,利用步驟2031的方法確定了待調(diào)試的內(nèi)核信息中各函數(shù)之間的調(diào)用關(guān)系。步驟2033 :比較由參考內(nèi)核信息得到的函數(shù)調(diào)用樹和由待調(diào)試的內(nèi)核信息得到的函數(shù)調(diào)用樹,分析兩個(gè)函數(shù)調(diào)用樹中各個(gè)節(jié)點(diǎn)對(duì)應(yīng)的函數(shù),確定參考內(nèi)核信息中函數(shù)和待調(diào)試的內(nèi)核信息中函數(shù)之間的對(duì)應(yīng)關(guān)系。具體地,通過節(jié)點(diǎn)上存儲(chǔ)的函數(shù)信息確定參考內(nèi)核信息與待調(diào)試的內(nèi)核信息中相似節(jié)點(diǎn)之間的對(duì)應(yīng)關(guān)系。較優(yōu)地,所述節(jié)點(diǎn)上存儲(chǔ)的函數(shù)信息包括執(zhí)行該函數(shù)的指令特征碼、該函數(shù)的子調(diào)用樹、該函數(shù)的父調(diào)用點(diǎn)、該函數(shù)的兄弟調(diào)用點(diǎn)、調(diào)用參數(shù)和返回參數(shù)等信息。較優(yōu)地,還可以直接通過函數(shù)特征碼來確定參考內(nèi)核信息與待調(diào)試的內(nèi)核信息中函數(shù)之間的對(duì)應(yīng)關(guān)系,即參考內(nèi)核信息和待調(diào)試的內(nèi)核信息中有相同特征碼的函數(shù)為具有對(duì)應(yīng)關(guān)系的函數(shù)。步驟2034 :根據(jù)參考內(nèi)核信息中各函數(shù)和調(diào)用地址之間的對(duì)應(yīng)關(guān)系,確定參考內(nèi)核信息中各函數(shù)的調(diào)用地址。在步驟2034中,在確定參考內(nèi)核信息的函數(shù)調(diào)用樹后,根據(jù)參考內(nèi)核信息的映射文件信息,查找參考內(nèi)核信息中各函數(shù)和函數(shù)的調(diào)用地址之間的對(duì)應(yīng)關(guān)系,確定參考內(nèi)核信息中各函數(shù)的調(diào)用地址。步驟2035 :將參考內(nèi)核中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,其中,參考內(nèi)核信息和待調(diào)試的內(nèi)核信息中有相同特征碼的函數(shù)為具有對(duì)應(yīng)關(guān)系的函數(shù)。在步驟2035中,根據(jù)步驟2033中確定的參考內(nèi)核信息中各函數(shù)與待調(diào)試的內(nèi)核信息中各函數(shù)之間的對(duì)應(yīng)關(guān)系,將參考內(nèi)核中每一個(gè)函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址。通過實(shí)施例二的方式,函數(shù)編譯器在對(duì)待調(diào)試的內(nèi)核信息進(jìn)行解析時(shí),采用了動(dòng)態(tài)遞歸向下的分析方法,克服了靜態(tài)分析方法存在不能解決動(dòng)態(tài)地址跳轉(zhuǎn)的問題,利用動(dòng)態(tài)遞歸向下的分析方法可以準(zhǔn)確地確定待調(diào)試的內(nèi)核中各函數(shù)之間的調(diào)用關(guān)系。實(shí)施例三如圖5所示,為本實(shí)施例三的一種內(nèi)核調(diào)試設(shè)備的結(jié)構(gòu)示意圖,所述內(nèi)核調(diào)試設(shè)備包括判斷模塊11、確定映射文件信息模塊12、確定調(diào)用地址模塊13、生成映射文件信息模塊14和內(nèi)核調(diào)試模塊15。其中,判斷模塊11,用于判斷待調(diào)試的內(nèi)核信息是否存在映射文件信息;確定映射文件信息模塊12,用于在判斷結(jié)果為存在映射文件信息時(shí),確定該待調(diào)試的內(nèi)核信息對(duì)應(yīng)的映射文件信息;確定調(diào)用地址模塊13,用于在判斷結(jié)果為不存在映射文件信息時(shí),確定該待調(diào)試的內(nèi)核信息的參考內(nèi)核信息,并將參考內(nèi)核信息中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,得到待調(diào)試的內(nèi)核信息中各函數(shù)的調(diào)用地址;生成映射文件信息模塊14,用于將待調(diào)試的內(nèi)核信息中各函數(shù)以及函數(shù)的調(diào)用地址作為待調(diào)試的內(nèi)核信息的映射文件信息;內(nèi)核調(diào)試模塊15,用于對(duì)映射文件信息中的指令信息進(jìn)行調(diào)試。具體地,所述確定調(diào)用地址模塊13,具體包括確定單元21、查找參考內(nèi)核信息單元22、生成函數(shù)調(diào)用樹單元23和確定調(diào)用地址單元24,其中,確定單元21,用于在調(diào)試環(huán)境下運(yùn)行待調(diào)試的內(nèi)核信息,確定待調(diào)試的內(nèi)核信息的版本號(hào)和函數(shù)編譯器;查找參考內(nèi)核信息單元22,用于將與確定的版本號(hào)最接近的版本號(hào)對(duì)應(yīng)的內(nèi)核信息作為待調(diào)試的內(nèi)核信息的參考內(nèi)核信息; 生成函數(shù)調(diào)用樹單元23,用于利用確定的函數(shù)編譯器分別對(duì)參考內(nèi)核信息和待調(diào)試的內(nèi)核信息進(jìn)行分析,得到參考內(nèi)核信息中的函數(shù)調(diào)用樹和待調(diào)試的內(nèi)核信息中的函數(shù)調(diào)用樹,其中,任一函數(shù)調(diào)用樹的一個(gè)節(jié)點(diǎn)表示一個(gè)函數(shù),函數(shù)中的一段代碼作為該函數(shù)的特征碼;確定調(diào)用地址單元24,用于根據(jù)參考內(nèi)核信息中各函數(shù)和調(diào)用地址之間的對(duì)應(yīng)關(guān)系,確定參考內(nèi)核信息中各函數(shù)的調(diào)用地址,并將參考內(nèi)核中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,其中,參考內(nèi)核信息和待調(diào)試的內(nèi)核信息中有相同特征碼的函數(shù)為具有對(duì)應(yīng)關(guān)系的函數(shù)。所述內(nèi)核調(diào)試模塊15,具體用于依次對(duì)映射文件信息中的每一條指令信息,執(zhí)行以下操作對(duì)該指令信息進(jìn)行翻譯,并對(duì)翻譯后的指令信息進(jìn)行調(diào)試。需要說明的是,該內(nèi)核調(diào)試設(shè)備可以是集成在QEMU調(diào)試系統(tǒng)中。如圖6所示,為QEMU調(diào)試系統(tǒng)的結(jié)構(gòu)示意圖。該QEMU調(diào)試系統(tǒng)包括被調(diào)試分析內(nèi)核單元31、執(zhí)行控制單元32、調(diào)試子系統(tǒng)單元33、控制臺(tái)34和調(diào)試接口。其中,內(nèi)核調(diào)試設(shè)備可以集成在被調(diào)試分析內(nèi)核單元中。執(zhí)行控制單元根據(jù)控制臺(tái)發(fā)送的控制指令對(duì)被調(diào)試分析內(nèi)核單元中的待調(diào)試的內(nèi)核信息進(jìn)行調(diào)試。 控制臺(tái)輸入不同的控制指令,執(zhí)行控制單元根據(jù)接收到的控制指令進(jìn)行相應(yīng)的調(diào) 試操作。其中,控制臺(tái)的控制指令可以為以下幾種A. memsearch addr content 表示在虛擬內(nèi)存中搜索從地址addr開始的content內(nèi)容;B. pmemsearch addr content 表示在物理內(nèi)存中搜索content內(nèi)容;C. no-anti-debugging 表示屏蔽針對(duì)虛擬機(jī)的反調(diào)試措施;D. memmodify addr content 表示將從虛擬地址addr開始的內(nèi)容修改為content ;E. memmodify addr content 表示將從物理地址addr開始的內(nèi)容修改為content ;F. bp condition 表示當(dāng)條件condition滿足時(shí),在當(dāng)前位置下斷點(diǎn);G. condition為條件判斷,使用示例eax==0x0804300| |eip==0x08048000 表不當(dāng)寄存器eax等于0x0804300或eip等于0x08048000時(shí)下斷點(diǎn);[esp-1][4]==0x68000000 表示當(dāng)esp-1處的內(nèi)存地址的開始4個(gè)字節(jié)的值等于0x68000000時(shí)下斷點(diǎn);H. bp addr condition 表示當(dāng)執(zhí)行到地址addr是,若條件condition滿足時(shí),貝U下斷點(diǎn)condition同上I. c 表示繼續(xù)執(zhí)行。需要說明的是,控制臺(tái)的控制指令不限于以上列舉的控制指令。調(diào)試子系統(tǒng)單元通過調(diào)試接口與遠(yuǎn)程調(diào)試器進(jìn)行信息交互。需要說明的是,調(diào)試接口結(jié)合QEMU本身處理器模擬功能,進(jìn)行硬件級(jí)調(diào)試方式,進(jìn)行從BIOS加電到內(nèi)核加載運(yùn)行的全程調(diào)試跟蹤。調(diào)試子系統(tǒng)支持GOB遠(yuǎn)程調(diào)試協(xié)議,可進(jìn)行遠(yuǎn)程調(diào)試。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍 之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種內(nèi)核調(diào)試的方法,其特征在于,所述方法包括 判斷待調(diào)試的內(nèi)核信息是否存在映射文件信息; 若存在,則確定該待調(diào)試的內(nèi)核信息對(duì)應(yīng)的映射文件信息,并對(duì)該映射文件信息中的指令信息進(jìn)行調(diào)試; 否則,確定該待調(diào)試的內(nèi)核信息的參考內(nèi)核信息,并將參考內(nèi)核信息中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,得到待調(diào)試的內(nèi)核信息中各函數(shù)的調(diào)用地址; 將待調(diào)試的內(nèi)核信息中各函數(shù)以及函數(shù)的調(diào)用地址作為待調(diào)試的內(nèi)核信息的映射文件信息,并對(duì)該映射文件信息中的指令信息進(jìn)行調(diào)試。
2.如權(quán)利要求I所述的方法,其特征在于,確定該待調(diào)試的內(nèi)核信息的參考內(nèi)核信息, 并將參考內(nèi)核信息中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,具體包括 在調(diào)試環(huán)境下運(yùn)行待調(diào)試的內(nèi)核信息,確定待調(diào)試的內(nèi)核信息的版本號(hào)和函數(shù)編譯器; 將與確定的版本號(hào)最接近的版本號(hào)對(duì)應(yīng)的內(nèi)核信息作為待調(diào)試的內(nèi)核信息的參考內(nèi)核信息; 利用確定的函數(shù)編譯器分別對(duì)參考內(nèi)核信息和待調(diào)試的內(nèi)核信息進(jìn)行分析,得到參考內(nèi)核信息中的函數(shù)調(diào)用樹和待調(diào)試的內(nèi)核信息中的函數(shù)調(diào)用樹,其中,任一函數(shù)調(diào)用樹的一個(gè)節(jié)點(diǎn)表示一個(gè)函數(shù),函數(shù)中的一段代碼作為該函數(shù)的特征碼; 根據(jù)參考內(nèi)核信息中各函數(shù)和調(diào)用地址之間的對(duì)應(yīng)關(guān)系,確定參考內(nèi)核信息中各函數(shù)的調(diào)用地址,并將參考內(nèi)核中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,其中,參考內(nèi)核信息和待調(diào)試的內(nèi)核信息中有相同特征碼的函數(shù)為具有對(duì)應(yīng)關(guān)系的函數(shù)。
3.如權(quán)利要求I或2所述的方法,其特征在于,對(duì)該映射文件信息中的指令信息進(jìn)行調(diào)試,具體包括 依次對(duì)映射文件信息中的每一條指令信息,執(zhí)行以下操作 對(duì)該指令信息進(jìn)行翻譯,并對(duì)翻譯后的指令信息進(jìn)行調(diào)試。
4.一種內(nèi)核調(diào)試設(shè)備,其特征在于,所述設(shè)備包括 判斷模塊,用于判斷待調(diào)試的內(nèi)核信息是否存在映射文件信息; 確定映射文件信息模塊,用于在判斷結(jié)果為存在映射文件信息時(shí),確定該待調(diào)試的內(nèi)核信息對(duì)應(yīng)的映射文件信息; 確定調(diào)用地址模塊,用于在判斷結(jié)果為不存在映射文件信息時(shí),確定該待調(diào)試的內(nèi)核信息的參考內(nèi)核信息,并將參考內(nèi)核信息中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,得到待調(diào)試的內(nèi)核信息中各函數(shù)的調(diào)用地址; 生成映射文件信息模塊,用于將待調(diào)試的內(nèi)核信息中各函數(shù)以及函數(shù)的調(diào)用地址作為待調(diào)試的內(nèi)核信息的映射文件信息; 內(nèi)核調(diào)試模塊,用于對(duì)映射文件信息中的指令信息進(jìn)行調(diào)試。
5.如權(quán)利要求4所述的內(nèi)核調(diào)試設(shè)備,其特征在于,所述確定調(diào)用地址模塊,具體包括確定單元,用于在調(diào)試環(huán)境下運(yùn)行待調(diào)試的內(nèi)核信息,確定待調(diào)試的內(nèi)核信息的版本號(hào)和函數(shù)編譯器; 查找參考內(nèi)核信息單元,用于將與確定的版本號(hào)最接近的版本號(hào)對(duì)應(yīng)的內(nèi)核信息作為待調(diào)試的內(nèi)核信息的參考內(nèi)核信息; 生成函數(shù)調(diào)用樹單元,用于利用確定的函數(shù)編譯器分別對(duì)參考內(nèi)核信息和待調(diào)試的內(nèi)核信息進(jìn)行分析,得到參考內(nèi)核信息中的函數(shù)調(diào)用樹和待調(diào)試的內(nèi)核信息中的函數(shù)調(diào)用樹,其中,任一函數(shù)調(diào)用樹的一個(gè)節(jié)點(diǎn)表示一個(gè)函數(shù),函數(shù)中的一段代碼作為該函數(shù)的特征碼; 確定調(diào)用地址單元,用于根據(jù)參考內(nèi)核信息中各函數(shù)和調(diào)用地址之間的對(duì)應(yīng)關(guān)系,確定參考內(nèi)核信息中各函數(shù)的調(diào)用地址,并將參考內(nèi)核中每一函數(shù)的調(diào)用地址作為該函數(shù)對(duì)應(yīng)在待調(diào)試的內(nèi)核信息中函數(shù)的調(diào)用地址,其中,參考內(nèi)核信息和待調(diào)試的內(nèi)核信息中有 相同特征碼的函數(shù)為具有對(duì)應(yīng)關(guān)系的函數(shù)。
6.如權(quán)利要求4或5所述的內(nèi)核調(diào)試設(shè)備,其特征在于, 所述內(nèi)核調(diào)試模塊,具體用于依次對(duì)映射文件信息中的每一條指令信息,執(zhí)行以下操作 對(duì)該指令信息進(jìn)行翻譯,并對(duì)翻譯后的指令信息進(jìn)行調(diào)試。
全文摘要
本發(fā)明公開了一種內(nèi)核調(diào)試的方法和設(shè)備,其主要內(nèi)容包括通過確定待調(diào)試的內(nèi)核信息的映射文件信息,其中,映射文件信息中包含了待調(diào)試的內(nèi)核信息中每一函數(shù)以及每一函數(shù)的調(diào)用地址,對(duì)確定的映射文件信息進(jìn)行調(diào)試,避免了現(xiàn)有技術(shù)中對(duì)Linux內(nèi)核進(jìn)行調(diào)試跟蹤存在調(diào)試方式復(fù)雜和調(diào)試效率低的問題,提高了Linux內(nèi)核調(diào)試的效率和降低了Linux內(nèi)核調(diào)試的難度。
文檔編號(hào)G06F11/36GK102722438SQ20121017844
公開日2012年10月10日 申請(qǐng)日期2012年6月1日 優(yōu)先權(quán)日2012年6月1日
發(fā)明者劉水生, 覃永靖, 韓鵬 申請(qǐng)人:北京神州綠盟信息安全科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
措勤县| 大英县| 斗六市| 平凉市| 浑源县| 龙山县| 阿克陶县| 五莲县| 永兴县| 鸡西市| 鱼台县| 濮阳县| 盐边县| 南陵县| 三亚市| 天全县| 平乡县| 广宗县| 资中县| 怀来县| 大丰市| 江北区| 准格尔旗| 奉节县| 焦作市| 江安县| 林州市| 南丰县| 鸡泽县| 靖江市| 平顶山市| 池州市| 永修县| 嘉祥县| 高唐县| 滕州市| 大连市| 上思县| 准格尔旗| 乃东县| 霍邱县|