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

一種ELF文件映像基地址的計(jì)算方法及裝置與流程

文檔序號(hào):11322987閱讀:1582來(lái)源:國(guó)知局
一種ELF文件映像基地址的計(jì)算方法及裝置與流程

本發(fā)明涉及計(jì)算機(jī)api攔截技術(shù)領(lǐng)域,特別是涉及一種elf文件映像基地址的計(jì)算方法及裝置。



背景技術(shù):

為了實(shí)現(xiàn)對(duì)計(jì)算機(jī)應(yīng)用程序的調(diào)試以及拓展原有的功能,現(xiàn)有計(jì)算技術(shù)領(lǐng)域普遍采用鉤子技術(shù)用來(lái)攔截不同api的調(diào)用,攔截api的技術(shù)有很多種,大體分為用戶層和內(nèi)核層的攔截,其中,對(duì)于用戶層的攔截技術(shù),一般是直接修改要攔截的api的內(nèi)存以及程序流程,使程序跳轉(zhuǎn)到指定的地址執(zhí)行,然后再返回到原地址。

在api攔截過(guò)程中,為了得到elf文件的動(dòng)態(tài)符號(hào)表和重定位鏈接過(guò)程表的內(nèi)容,需要計(jì)算確定動(dòng)態(tài)符號(hào)表和重定位鏈接過(guò)程表的位置,但是現(xiàn)有的api攔截技術(shù)中往往不會(huì)對(duì)包含exe和dyn兩種類(lèi)型的elf文件加以區(qū)分,造成對(duì)動(dòng)態(tài)符號(hào)表和重定位鏈接過(guò)程表所定位的位置與實(shí)際位置有所偏差。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明所要解決的技術(shù)問(wèn)題是:提供一種elf文件映像基地址的計(jì)算方法及裝置,根據(jù)elf文件的類(lèi)型,特別是exe類(lèi)型文件,分別進(jìn)行不同的基地址計(jì)算,以提高對(duì)elf文件基地址的計(jì)算精度。

本發(fā)明解決上述技術(shù)問(wèn)題所采用的技術(shù)方案是:

本發(fā)明提供了一種elf文件映像基地址的計(jì)算方法,包括:獲取elf文件的信息,根據(jù)信息確定elf文件的類(lèi)型,其中,elf文件的類(lèi)型包括exe文件和dyn文件;在elf文件的類(lèi)型為exe文件時(shí),依次獲取elf文件的程序頭;判斷程序頭的是否滿足預(yù)設(shè)的位置條件及節(jié)頭條件,若滿足,則設(shè)置程序頭的虛擬地址為exe文件的映像基地址。

進(jìn)一步的,獲取elf文件的信息的過(guò)程包括:從elf文件中讀取elf文件的程序頭部表。

進(jìn)一步的,判斷程序頭的是否滿足預(yù)設(shè)的位置條件及節(jié)頭條件的過(guò)程包括:判斷獲取的程序頭是否位于程序頭部表的末尾,若否,則滿足位置條件;判斷獲取的程序頭是否為可讀可執(zhí)行的裝載段節(jié)頭,若是,則滿足節(jié)頭條件。

進(jìn)一步的,計(jì)算方法還包括:在elf文件為dyn文件時(shí),獲取dyn文件的節(jié)頭信息;根據(jù)節(jié)頭信息確定dyn文件的動(dòng)態(tài)鏈接信息;根據(jù)動(dòng)態(tài)鏈接信息判斷是否滿足預(yù)設(shè)的sym條件,在滿足條件時(shí),計(jì)算確定dyn文件的映像基地址。

進(jìn)一步的,獲取dyn文件的節(jié)頭信息的過(guò)程包括:讀取dyn文件的動(dòng)態(tài)鏈接符號(hào)節(jié)頭和字符串節(jié)頭;根據(jù)節(jié)頭信息確定dyn文件的動(dòng)態(tài)鏈接信息的過(guò)程包括:根據(jù)動(dòng)態(tài)鏈接符號(hào)節(jié)頭確定dyn文件的動(dòng)態(tài)鏈接符號(hào)表,根據(jù)字符串節(jié)頭確定dyn文件的動(dòng)態(tài)鏈接符號(hào)字符串表;根據(jù)動(dòng)態(tài)鏈接信息判斷是否滿足預(yù)設(shè)的sym條件,在滿足條件時(shí),計(jì)算確定dyn文件的映像基地址的過(guò)程包括:從動(dòng)態(tài)鏈接符號(hào)表中重復(fù)取下一個(gè)符號(hào)sym并獲取sym的偏移量,判斷是否達(dá)到動(dòng)態(tài)鏈接符號(hào)表的末尾,若否,則判斷sym是否為外部函數(shù)且偏移量非0;若sym為外部函數(shù)且偏移量非0,則從動(dòng)態(tài)鏈接符號(hào)字符串表中獲取sym的函數(shù)名稱(chēng),并調(diào)用庫(kù)函數(shù)返回fun;判斷fun是否為非空,fun為通過(guò)dlopen函數(shù)所獲取的對(duì)應(yīng)符號(hào)的函數(shù)地址,若fun非空,則設(shè)置elf文件的映像基地址為fun和sym偏移量的差。

本發(fā)明該提供了一種應(yīng)用該計(jì)算方法的裝置,包括:第一獲取單元,用于獲取elf文件的信息,根據(jù)信息確定elf文件的類(lèi)型,其中,elf文件的類(lèi)型包括exe文件和dyn文件;第二獲取單元,用于elf文件的類(lèi)型為exe文件時(shí),依次獲取elf文件的程序頭;判斷單元,用于判斷程序頭的是否滿足預(yù)設(shè)的位置條件及節(jié)頭條件,若滿足,則設(shè)置程序頭的虛擬地址為exe文件的映像基地址。

進(jìn)一步的,第一獲取單元用于:從elf文件中讀取elf文件的程序頭部表。

進(jìn)一步的,判斷單元用于:判斷獲取的程序頭是否位于程序頭部表的末尾,若否,則滿足位置條件;判斷獲取的程序頭是否為可讀可執(zhí)行的裝載段節(jié)頭,若是,則滿足節(jié)頭條件。

進(jìn)一步的,第二獲取單元用于:在elf文件為dyn文件時(shí),獲取dyn文件的節(jié)頭信息;根據(jù)節(jié)頭信息確定dyn文件的動(dòng)態(tài)鏈接信息;判斷單元用于:根據(jù)動(dòng)態(tài)鏈接信息判斷是否滿足預(yù)設(shè)的sym條件,在滿足條件時(shí),計(jì)算確定dyn文件的映像基地址。

進(jìn)一步的,第二獲取單元用于:讀取dyn文件的動(dòng)態(tài)鏈接符號(hào)節(jié)頭和字符串節(jié)頭;根據(jù)節(jié)頭信息確定dyn文件的動(dòng)態(tài)鏈接信息的過(guò)程包括:根據(jù)動(dòng)態(tài)鏈接符號(hào)節(jié)頭確定dyn文件的動(dòng)態(tài)鏈接符號(hào)表,根據(jù)字符串節(jié)頭確定dyn文件的動(dòng)態(tài)鏈接符號(hào)字符串表;判斷單元用于:從動(dòng)態(tài)鏈接符號(hào)表中重復(fù)取下一個(gè)符號(hào)sym并獲取sym的偏移量,判斷是否達(dá)到動(dòng)態(tài)鏈接符號(hào)表的末尾,若否,則判斷sym是否為外部函數(shù)且偏移量非0;若sym為外部函數(shù)且偏移量非0,則從動(dòng)態(tài)鏈接符號(hào)字符串表中獲取sym的函數(shù)名稱(chēng),并調(diào)用庫(kù)函數(shù)返回fun;判斷fun是否為非空,fun為通過(guò)dlopen函數(shù)所獲取的對(duì)應(yīng)符號(hào)的函數(shù)地址,若fun非空,則設(shè)置elf文件的映像基地址為fun和sym偏移量的差。

本發(fā)明采用上述技術(shù)方案所具有的有益效果是:

本發(fā)明在elf基地址計(jì)算過(guò)程根據(jù)其類(lèi)型加以區(qū)分,分別計(jì)算exe和dyn兩種類(lèi)型文件的基地址,可以提高對(duì)動(dòng)態(tài)符號(hào)表和重定位鏈接過(guò)程表的位置的計(jì)算精度,極大的加快了api的攔截流程和處理效率,保證api攔截相關(guān)數(shù)據(jù)的準(zhǔn)確性。

附圖說(shuō)明

圖1為本發(fā)明計(jì)算方法的流程圖一;

圖2為本發(fā)明計(jì)算方法的流程圖二;

圖3為本發(fā)明一實(shí)施例中的流程圖三。

具體實(shí)施方式

為清楚的說(shuō)明本發(fā)明中的方案,下面給出優(yōu)選的實(shí)施例并結(jié)合附圖詳細(xì)說(shuō)明。以下的說(shuō)明本質(zhì)上僅僅是示例性的而并不是為了限制本公開(kāi)的應(yīng)用或用途。應(yīng)當(dāng)理解的是,在全部的附圖中,對(duì)應(yīng)的附圖標(biāo)記表示相同或?qū)?yīng)的部件和特征。

如圖1所示,本發(fā)明提供了一種elf文件映像基地址的計(jì)算方法,,包括:

s101、獲取elf文件的信息,根據(jù)信息確定elf文件的類(lèi)型,其中,elf文件的類(lèi)型包括exe文件和dyn文件;

s102、在elf文件的類(lèi)型為exe文件時(shí),依次獲取elf文件的程序頭;

s103、判斷程序頭的是否滿足預(yù)設(shè)的位置條件及節(jié)頭條件,若滿足,則設(shè)置程序頭的虛擬地址為exe文件的映像基地址。

實(shí)施例中,獲取elf文件的信息的過(guò)程包括:從elf文件中讀取elf文件的程序頭部表。

實(shí)施例中,判斷程序頭的是否滿足預(yù)設(shè)的位置條件及節(jié)頭條件的過(guò)程包括:

判斷獲取的程序頭是否位于程序頭部表的末尾,若否,則滿足位置條件;

判斷獲取的程序頭是否為可讀可執(zhí)行的裝載段節(jié)頭,若是,則滿足節(jié)頭條件。具體的,裝載段節(jié)頭為映射到系統(tǒng)內(nèi)存中的二進(jìn)制文件,例如代碼段和數(shù)據(jù)段。

如圖2和圖3所示,除上述exe類(lèi)型的elf文件的計(jì)算方法外,在elf文件為dyn文件時(shí),其計(jì)算方法還包括:

s201、獲取dyn文件的節(jié)頭信息;

s202、根據(jù)節(jié)頭信息確定dyn文件的動(dòng)態(tài)鏈接信息;

s203、根據(jù)動(dòng)態(tài)鏈接信息判斷是否滿足預(yù)設(shè)的sym條件,在滿足條件時(shí),計(jì)算確定dyn文件的映像基地址。

實(shí)施例中,獲取dyn文件的節(jié)頭信息的過(guò)程包括:讀取dyn文件的動(dòng)態(tài)鏈接符號(hào)節(jié)頭和字符串節(jié)頭,動(dòng)態(tài)鏈接符號(hào)節(jié)頭和字符串節(jié)頭即為要獲取的節(jié)頭信息。

實(shí)施例中,根據(jù)節(jié)頭信息確定dyn文件的動(dòng)態(tài)鏈接信息的過(guò)程包括:根據(jù)動(dòng)態(tài)鏈接符號(hào)節(jié)頭確定dyn文件的動(dòng)態(tài)鏈接符號(hào)表,根據(jù)字符串節(jié)頭確定dyn文件的動(dòng)態(tài)鏈接符號(hào)字符串表。

實(shí)施例中,根據(jù)動(dòng)態(tài)鏈接信息判斷是否滿足預(yù)設(shè)的sym條件,在滿足條件時(shí),計(jì)算確定dyn文件的映像基地址的過(guò)程包括:

s301、從動(dòng)態(tài)鏈接符號(hào)表中重復(fù)取下一個(gè)符號(hào)sym并獲取sym的偏移量,判斷是否達(dá)到動(dòng)態(tài)鏈接符號(hào)表的末尾,若否,則判斷sym是否為外部可見(jiàn)的導(dǎo)出函數(shù)且偏移量非0;

s302、若sym為外部函數(shù)且偏移量非0,則從動(dòng)態(tài)鏈接符號(hào)字符串表中獲取sym的函數(shù)名稱(chēng),并調(diào)用庫(kù)函數(shù)返回fun;

s303、判斷fun是否為非空,fun為通過(guò)dlopen函數(shù)所獲取的對(duì)應(yīng)符號(hào)的函數(shù)地址若fun非空,則設(shè)置elf文件的映像基地址為fun和sym偏移量的差。

本發(fā)明還提供了一種裝置,該裝置采用上述實(shí)施例中所公開(kāi)的計(jì)算方法對(duì)elf的基地址進(jìn)行計(jì)算,裝置具體包括:

第一獲取單元,用于獲取elf文件的信息,根據(jù)信息確定elf文件的類(lèi)型,其中,elf文件的類(lèi)型包括exe文件和dyn文件;

第二獲取單元,用于elf文件的類(lèi)型為exe文件時(shí),依次獲取elf文件的程序頭;

判斷單元,用于判斷程序頭的是否滿足預(yù)設(shè)的位置條件及節(jié)頭條件,若滿足,則設(shè)置程序頭的虛擬地址為exe文件的映像基地址。

第一獲取單元還用于:從elf文件中讀取elf文件的程序頭部表,包括獲取該exe類(lèi)型或dyn類(lèi)型elf文件的程序頭部表。

對(duì)于exe類(lèi)型的elf文件,判斷單元用于:判斷獲取的程序頭是否位于程序頭部表的末尾,若否,則滿足位置條件;判斷獲取的程序頭是否為可讀可執(zhí)行的裝載段節(jié)頭,若是,則滿足節(jié)頭條件。

對(duì)于dyn類(lèi)型的elf文件,第二獲取單元用于:在elf文件為dyn文件時(shí),獲取dyn文件的節(jié)頭信息;根據(jù)節(jié)頭信息確定dyn文件的動(dòng)態(tài)鏈接信息;判斷單元用于:根據(jù)動(dòng)態(tài)鏈接信息判斷是否滿足預(yù)設(shè)的sym條件,在滿足條件時(shí),計(jì)算確定dyn文件的映像基地址。

具體的,對(duì)于dyn類(lèi)型的elf文件,第二獲取單元用于:讀取dyn文件的動(dòng)態(tài)鏈接符號(hào)節(jié)頭和字符串節(jié)頭;根據(jù)節(jié)頭信息確定dyn文件的動(dòng)態(tài)鏈接信息的過(guò)程包括:根據(jù)動(dòng)態(tài)鏈接符號(hào)節(jié)頭確定dyn文件的動(dòng)態(tài)鏈接符號(hào)表,根據(jù)字符串節(jié)頭確定dyn文件的動(dòng)態(tài)鏈接符號(hào)字符串表。判斷單元用于:從動(dòng)態(tài)鏈接符號(hào)表中重復(fù)取下一個(gè)符號(hào)sym并獲取sym的偏移量,判斷是否達(dá)到動(dòng)態(tài)鏈接符號(hào)表的末尾,若否,則判斷sym是否為外部函數(shù)且偏移量非0;若sym為外部函數(shù)且偏移量非0,則從動(dòng)態(tài)鏈接符號(hào)字符串表中獲取sym的函數(shù)名稱(chēng),并調(diào)用庫(kù)函數(shù)返回fun;判斷fun是否為非空,fun為通過(guò)dlopen函數(shù)所獲取的對(duì)應(yīng)符號(hào)的函數(shù)地址,若fun非空,則設(shè)置elf文件的映像基地址為fun和sym偏移量的差。

綜上,以上內(nèi)容僅為本發(fā)明的實(shí)施例,僅用于說(shuō)明本發(fā)明的原理,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
阜南县| 紫金县| 泰宁县| 汨罗市| 阿城市| 屯昌县| 麻阳| 长汀县| 册亨县| 佛坪县| 桑日县| 定西市| 崇阳县| 光泽县| 菏泽市| 兰溪市| 宜良县| 虹口区| 岗巴县| 建德市| 德江县| 彰武县| 雷山县| 南投县| 麻阳| 乌鲁木齐县| 汝阳县| 林甸县| 木兰县| 黑山县| 平湖市| 永宁县| 赤壁市| 涿州市| 康平县| 革吉县| 阳西县| 堆龙德庆县| 根河市| 南和县| 荆州市|