一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法、裝置及智能終端的制作方法
【專利摘要】本發(fā)明實(shí)施例公開了一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法、裝置及智能終端,其中,所述方法包括:在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令用于指示目標(biāo)地址,所述調(diào)用函數(shù)用于使所述應(yīng)用程序從所述調(diào)用函數(shù)跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù);根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址;根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù)。采用本發(fā)明實(shí)施例,可簡(jiǎn)便快捷地實(shí)現(xiàn)應(yīng)用程序中函數(shù)的跳轉(zhuǎn)處理。
【專利說明】
一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法、裝置及智能終端
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,尤其涉及一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法、裝置及智能終端。
【背景技術(shù)】
[0002]智能終端中所使用的ARM架構(gòu),稱作進(jìn)階精簡(jiǎn)指令集機(jī)器架構(gòu)(英文全稱為:Advanced RISC Machine,或者為:Acorn RISC Machine)。該架構(gòu)中包括內(nèi)置鉤子Inlinehook機(jī)制,使得在基于動(dòng)態(tài)庫執(zhí)行內(nèi)部函數(shù)調(diào)用時(shí),能夠跳轉(zhuǎn)到自定義的外部函數(shù)上執(zhí)行,實(shí)現(xiàn)新的自定義功能。
[0003]目前,在Inlinehook機(jī)制中常用的技術(shù)方案是修改被hook函數(shù)頭部的機(jī)器碼,達(dá)到跳轉(zhuǎn)到某個(gè)外部函數(shù)(被調(diào)用函數(shù))的目的。例如,被hook函數(shù)B頭部的機(jī)器碼被修改為跳轉(zhuǎn)到函數(shù)C,那么應(yīng)用程序的調(diào)用函數(shù)A通過調(diào)用被hook函數(shù)B,即可跳轉(zhuǎn)到函數(shù)C,并執(zhí)行函數(shù)C。
[0004]上述實(shí)現(xiàn)函數(shù)跳轉(zhuǎn)調(diào)用的方式較為復(fù)雜,并且對(duì)被hook函數(shù)的修改會(huì)影響到與該被hook函數(shù)關(guān)聯(lián)的其他調(diào)用函數(shù)。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實(shí)施例提供一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法、裝置及智能終端,可簡(jiǎn)便快捷地實(shí)現(xiàn)應(yīng)用程序中函數(shù)的跳轉(zhuǎn)處理。
[0006]—方面,本發(fā)明實(shí)施例提供了一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法,包括:
[0007]在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令用于指示目標(biāo)地址,所述調(diào)用函數(shù)用于使所述應(yīng)用程序從所述調(diào)用函數(shù)跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù);
[0008]根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址;
[0009]根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù)。
[0010]其中可選地,所述跳轉(zhuǎn)指令中記錄的目標(biāo)地址為內(nèi)存中空閑空間的地址,所述空閑空間中設(shè)置有配置指令,所述根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址,包括:
[0011]根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定出內(nèi)存中設(shè)置的配置指令;
[0012]根據(jù)所述配置指令,得到被調(diào)用函數(shù)的入口地址。
[0013]其中可選地,所述空閑空間是指:在加載動(dòng)態(tài)庫SO文件時(shí),被SO文件占用的內(nèi)存頁中沒有存儲(chǔ)數(shù)據(jù)的內(nèi)存空間。
[0014]其中可選地,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調(diào)用函數(shù)的入口地址寫入到所述寄存器中。
[0015]其中可選地,所述根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù),包括:
[0016]在執(zhí)行到調(diào)用函數(shù)中的所述跳轉(zhuǎn)指令的下一指令時(shí),讀取所述寄存器中寫入的所述被調(diào)用函數(shù)的入口地址;
[0017]從所述入口地址開始執(zhí)行所述被調(diào)用函數(shù)。
[0018]其中可選地,所述在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令之前,還包括:
[0019]從應(yīng)用程序中的調(diào)用函數(shù)的首地址開始確定跳轉(zhuǎn)指令,并將確定的跳轉(zhuǎn)指令記錄的地址配置為目標(biāo)地址的偏移地址。
[0020]另一方面,本發(fā)明實(shí)施例相應(yīng)地提供了一種在應(yīng)用程序中的跳轉(zhuǎn)處理裝置,包括:
[0021]獲取模塊,用于在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令用于指示目標(biāo)地址,所述調(diào)用函數(shù)用于使所述應(yīng)用程序從所述調(diào)用函數(shù)跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù);
[0022]確定模塊,用于根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址;
[0023]執(zhí)行模塊,用于根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù)。
[0024]其中可選地,所述跳轉(zhuǎn)指令中記錄的目標(biāo)地址為內(nèi)存中空閑空間的地址,所述空閑空間中設(shè)置有配置指令;
[0025]所述確定模塊,具體用于根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定出內(nèi)存中設(shè)置的配置指令;根據(jù)所述配置指令,得到被調(diào)用函數(shù)的入口地址。
[0026]其中可選地,所述空閑空間是指:在加載動(dòng)態(tài)庫SO文件時(shí),被SO文件占用的內(nèi)存頁中沒有存儲(chǔ)數(shù)據(jù)的內(nèi)存空間。
[0027]其中可選地,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調(diào)用函數(shù)的入口地址寫入到所述寄存器中。
[0028]其中可選地,所述執(zhí)行模塊具體用于在執(zhí)行到調(diào)用函數(shù)中的所述跳轉(zhuǎn)指令的下一指令時(shí),讀取所述寄存器中寫入的所述被調(diào)用函數(shù)的入口地址;從所述入口地址開始執(zhí)行所述被調(diào)用函數(shù)。
[0029]其中可選地,所述裝置還包括:
[0030]預(yù)置模塊,用于從應(yīng)用程序中的調(diào)用函數(shù)的首地址開始確定跳轉(zhuǎn)指令,并將確定的跳轉(zhuǎn)指令記錄的地址配置為目標(biāo)地址的偏移地址。
[0031]再一方面,本發(fā)明實(shí)施例相應(yīng)地還提供了一種智能終端,包括處理器;
[0032]所述處理器,用于在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令用于指示目標(biāo)地址,所述調(diào)用函數(shù)用于使所述應(yīng)用程序從所述調(diào)用函數(shù)跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù);根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址;根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù)。
[0033]本發(fā)明實(shí)施例能夠通過對(duì)調(diào)用函數(shù)中的跳轉(zhuǎn)指令進(jìn)行配置以及處理,直接跳轉(zhuǎn)到跳轉(zhuǎn)指令指示的目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù),簡(jiǎn)便快捷地實(shí)現(xiàn)有針對(duì)性的函數(shù)跳轉(zhuǎn)調(diào)用,只針對(duì)單個(gè)調(diào)用函數(shù)完成函數(shù)跳轉(zhuǎn)和調(diào)用,不會(huì)影響其他的調(diào)用函數(shù)。
【附圖說明】
[0034]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0035]圖1是本發(fā)明實(shí)施例的一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法的流程示意圖;
[0036]圖2是本發(fā)明實(shí)施例的一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法的流程示意圖;
[0037]圖3是本發(fā)明實(shí)施例的一種在應(yīng)用程序中的跳轉(zhuǎn)處理裝置的結(jié)構(gòu)示意圖;
[0038]圖4是本發(fā)明實(shí)施例的一種智能終端的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0039]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0040]本發(fā)明實(shí)施例中,通過對(duì)應(yīng)用程序中的某個(gè)調(diào)用函數(shù)包括的跳轉(zhuǎn)指令進(jìn)行修改配置,將該跳轉(zhuǎn)指令配置為用于表示需要被調(diào)用函數(shù)的地址的指令,以便于在執(zhí)行到該跳轉(zhuǎn)指令后,能夠跳轉(zhuǎn)到被調(diào)用的函數(shù)。其中,在出現(xiàn)由于跳轉(zhuǎn)指令偏移地址的大小受限,而使得該跳轉(zhuǎn)指令無法表示出被調(diào)用函數(shù)的地址的情況時(shí),可以將該跳轉(zhuǎn)指令先表示為一個(gè)內(nèi)存中加載動(dòng)態(tài)庫SO后產(chǎn)生的被SO文件占用但沒有數(shù)據(jù)的空閑空間的地址,在執(zhí)行到該跳轉(zhuǎn)指令后,可以先跳轉(zhuǎn)到SO內(nèi)部的空閑地址,然后再根據(jù)該空閑空間中預(yù)設(shè)的指令來修改終端寄存器的方式完成跳轉(zhuǎn),進(jìn)而執(zhí)行被調(diào)用函數(shù)。
[0041]具體的,請(qǐng)參見圖1,是本發(fā)明實(shí)施例的一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法的流程示意圖,本發(fā)明實(shí)施例的所述方法可以由智能終端中的處理器來執(zhí)行,所述智能終端包括智能手機(jī)、平板電腦、個(gè)人電腦PC等設(shè)備,具體的,本發(fā)明實(shí)施例的所述方法包括如下步驟。
[0042]SlOl:在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令指示有目標(biāo)地址,所述調(diào)用函數(shù)用于使所述應(yīng)用程序從所述調(diào)用函數(shù)跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù),即:在執(zhí)行到所述應(yīng)用程序的調(diào)用函數(shù)后,可以跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù),并執(zhí)行該被調(diào)用函數(shù)。
[0043]在ARM架構(gòu)中,函數(shù)調(diào)用時(shí)的跳轉(zhuǎn)指令對(duì)應(yīng)到匯編代碼包括BL和BLX指令等,其中,BL為帶鏈接跳轉(zhuǎn)、BLX為帶鏈接跳轉(zhuǎn)并切換指令集,通過這兩個(gè)指令集,可以實(shí)現(xiàn)函數(shù)的調(diào)用跳轉(zhuǎn)。
[0044]為了達(dá)到從調(diào)用函數(shù)跳轉(zhuǎn)到某個(gè)所需的被調(diào)用函數(shù)的目的,在執(zhí)行所述步驟SlOl之前,可以從所述調(diào)用函數(shù)的首地址開始尋找所有的BL和BLX指令。在找到調(diào)用函數(shù)中跳轉(zhuǎn)指令(BL或BLX)的地址之后,可以把該地址下跳轉(zhuǎn)指令(BL或BLX指令)中記錄的地址替換為所需的目標(biāo)地址,以便于在該跳轉(zhuǎn)指令中記錄關(guān)于被調(diào)用函數(shù)的目標(biāo)地址。
[0045]在本發(fā)明實(shí)施例中,可以僅在所述調(diào)用函數(shù)中包括的跳轉(zhuǎn)指令中配置包括關(guān)于被調(diào)用函數(shù)的偏移地址。由于所述調(diào)用函數(shù)的地址為已知,因此,在后續(xù)執(zhí)行到所述跳轉(zhuǎn)指令時(shí),根據(jù)所述跳轉(zhuǎn)指令中的偏移地址和所述調(diào)用函數(shù)的地址,可以計(jì)算出關(guān)于被調(diào)用函數(shù)的目標(biāo)地址。
[0046]S102:根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址。
[0047]所述目標(biāo)地址可以直接為所述被調(diào)用函數(shù)的入口地址?;蛘?,也可以為關(guān)于被調(diào)用函數(shù)的中轉(zhuǎn)地址,在確定出目標(biāo)地址后,可以首先找到目標(biāo)地址所指示的空閑空間,然后再從該空閑空間中得到所述被調(diào)用函數(shù)的入口地址。
[0048]S103:根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù)。
[0049]在確定了被調(diào)用函數(shù)的入口地址后,即可從該入口地址所對(duì)應(yīng)的存儲(chǔ)空間中存儲(chǔ)的指令開始,執(zhí)行所述被調(diào)用函數(shù),實(shí)現(xiàn)該被調(diào)用函數(shù)的功能。
[0050]本發(fā)明實(shí)施例能夠通過對(duì)調(diào)用函數(shù)中的跳轉(zhuǎn)指令進(jìn)行配置以及處理,直接跳轉(zhuǎn)到跳轉(zhuǎn)指令指示的目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù),簡(jiǎn)便、快捷地實(shí)現(xiàn)函數(shù)跳轉(zhuǎn)調(diào)用。并且本發(fā)明實(shí)施例可以只針對(duì)單個(gè)調(diào)用函數(shù)完成函數(shù)跳轉(zhuǎn)和調(diào)用,不會(huì)影響其他的調(diào)用函數(shù)。
[0051]再請(qǐng)參見圖2,是本發(fā)明實(shí)施例的一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法的流程示意圖,本發(fā)明實(shí)施例的所述方法可以由智能終端中的處理器來執(zhí)行,所述智能終端包括智能手機(jī)、平板電腦等設(shè)備,具體的,本發(fā)明實(shí)施例的所述方法包括如下步驟。
[0052]S201:從應(yīng)用程序中的調(diào)用函數(shù)的首地址開始確定跳轉(zhuǎn)指令,并將確定的跳轉(zhuǎn)指令記錄的地址配置為目標(biāo)地址的偏移地址。
[0053]當(dāng)需要從調(diào)用函數(shù)跳轉(zhuǎn)到某個(gè)所需的被調(diào)用函數(shù)時(shí),可以先對(duì)所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令記錄的偏移地址進(jìn)行修改,將其替換為所述所需的被調(diào)用函數(shù)相對(duì)于調(diào)用函數(shù)所在地址的偏移地址。
[0054]具體的,跳轉(zhuǎn)指令包括BL或BLX指令等,在所述調(diào)用函數(shù)的跳轉(zhuǎn)指令中可以記錄關(guān)于所述被調(diào)用函數(shù)的偏移地址,根據(jù)所述調(diào)用函數(shù)的地址和記錄的偏移地址,計(jì)算得到所述被調(diào)用函數(shù)的目標(biāo)地址,因此,所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令用于指示目標(biāo)地址。
[0055]跳轉(zhuǎn)指令中記錄關(guān)于所述被調(diào)用函數(shù)的偏移地址是指:所述被調(diào)用函數(shù)的入口地址相對(duì)于所述調(diào)用函數(shù)的入口地址的偏移地址;或者,一個(gè)包括有被調(diào)用函數(shù)的入口地址的空閑空間的地址相對(duì)于所述調(diào)用函數(shù)的入口地址的偏移地址,例如內(nèi)存中的某個(gè)空閑空間的地址相對(duì)于所述調(diào)用函數(shù)的入口地址的偏移地址。
[0056]S202:在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令;應(yīng)用程序中的所述調(diào)用函數(shù)主要用于使所述應(yīng)用程序從所述調(diào)用函數(shù)跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù),即跳轉(zhuǎn)到所需的某個(gè)被調(diào)用函數(shù)。
[0057]S203:根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定出內(nèi)存中設(shè)置的配置指令。所述跳轉(zhuǎn)指令所指示的目標(biāo)地址為內(nèi)存中空閑空間的地址,所述空閑空間中設(shè)置有配置指令。在本發(fā)明實(shí)施例中,所述空閑空間包括:在加載動(dòng)態(tài)庫SO文件時(shí),被SO文件占用的內(nèi)存頁中沒有存儲(chǔ)數(shù)據(jù)的內(nèi)存空間。
[0058]在ARM結(jié)構(gòu)中,跳轉(zhuǎn)指令(BL或BLX指令)對(duì)目標(biāo)地址的偏移大小有限制,如果偏移地址的大小超過兩個(gè)字節(jié),則無法有效地將偏移地址記載到跳轉(zhuǎn)指令中。因此,對(duì)于超過兩個(gè)字節(jié)的偏移地址,本發(fā)明實(shí)施例采取的方式是先跳轉(zhuǎn)到SO內(nèi)部的空閑地址,然后再完成函數(shù)跳轉(zhuǎn)。
[0059]具體的,SO在被系統(tǒng)加載到內(nèi)存中時(shí),是按照段進(jìn)行映射的。每一個(gè)段是所有具有相同的讀寫權(quán)限的部分sect1n的集合,映射的時(shí)候是按頁為單位進(jìn)行映射,最后不足一頁的部分也會(huì)占用一頁的內(nèi)存。本發(fā)明實(shí)施例利用這一部分被占用但沒有存儲(chǔ)數(shù)據(jù)的內(nèi)存來存儲(chǔ)一段配置指令,基于該段指令最后能夠跳轉(zhuǎn)到所述被調(diào)用函數(shù)。
[0060]S204:根據(jù)所述配置指令,得到被調(diào)用函數(shù)的入口地址。所述配置指令用于指示修改寄存器的值,將包括在該配置指令中的被調(diào)用函數(shù)的入口地址寫入到所述寄存器中。
[0061]S205:在執(zhí)行到調(diào)用函數(shù)中的所述跳轉(zhuǎn)指令的下一指令時(shí),讀取所述寄存器中寫入的所述被調(diào)用函數(shù)的入口地址。
[0062]S206:從所述入口地址開始執(zhí)行所述被調(diào)用函數(shù)。在確定了被調(diào)用函數(shù)的入口地址后,即可從該入口地址所對(duì)應(yīng)的存儲(chǔ)空間中存儲(chǔ)的指令,開始執(zhí)行所述被調(diào)用函數(shù),實(shí)現(xiàn)該被調(diào)用函數(shù)的功能。
[0063]本發(fā)明實(shí)施例能夠通過對(duì)調(diào)用函數(shù)中的跳轉(zhuǎn)指令進(jìn)行配置以及處理,直接跳轉(zhuǎn)到跳轉(zhuǎn)指令指示的目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù),簡(jiǎn)便、快捷地實(shí)現(xiàn)函數(shù)跳轉(zhuǎn)調(diào)用。并且本發(fā)明實(shí)施例可以只針對(duì)單個(gè)調(diào)用函數(shù)完成函數(shù)跳轉(zhuǎn)和調(diào)用,不會(huì)影響其他的調(diào)用函數(shù)。
[0064]再請(qǐng)參見圖3,是本發(fā)明實(shí)施例的一種在應(yīng)用程序中的跳轉(zhuǎn)處理裝置的結(jié)構(gòu)組成示意圖,本發(fā)明實(shí)施例的所述裝置可以應(yīng)用在智能終端中,所述智能終端包括智能手機(jī)、平板電腦等設(shè)備,具體的,所述裝置包括如下模塊。
[0065]獲取模塊301,用于在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令用于指示目標(biāo)地址,所述調(diào)用函數(shù)用于使所述應(yīng)用程序從所述調(diào)用函數(shù)跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù);確定模塊302,用于根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址;執(zhí)行模塊303,用于根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù)。
[0066]為了達(dá)到從調(diào)用函數(shù)跳轉(zhuǎn)到某個(gè)所需的被調(diào)用函數(shù)的目的,在所述獲取模塊301獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令之前,可以從所述調(diào)用函數(shù)的首地址開始尋找所有的BL和BLX指令。在找到調(diào)用函數(shù)中跳轉(zhuǎn)指令(BL或BLX)的地址之后,可以把該地址下跳轉(zhuǎn)指令(BL或BLX)中記錄的目標(biāo)地址替換為所需地址,以便于在該跳轉(zhuǎn)指令中記錄關(guān)于被調(diào)用函數(shù)的目標(biāo)地址。
[0067]在本發(fā)明實(shí)施例中,可以在所述調(diào)用函數(shù)包括的跳轉(zhuǎn)指令(BL或BLX指令)中配置關(guān)于被調(diào)用函數(shù)的偏移地址。由于所述調(diào)用函數(shù)的地址為已知,因此,在所述獲取模塊301獲取到跳轉(zhuǎn)指令后,所述確定模塊302能夠根據(jù)所述跳轉(zhuǎn)指令中的偏移地址和所述調(diào)用函數(shù)的地址,可以計(jì)算出關(guān)于被調(diào)用函數(shù)的目標(biāo)地址。
[0068]所述目標(biāo)地址可以直接為所述被調(diào)用函數(shù)的入口地址。或者,也可以為關(guān)于被調(diào)用函數(shù)的中轉(zhuǎn)地址,在確定出目標(biāo)地址后,所述確定模塊302可以首先找到目標(biāo)地址所指示的空閑空間,然后再從該空閑空間中得到所述被調(diào)用函數(shù)的入口地址。
[0069]在確定了被調(diào)用函數(shù)的入口地址后,所述執(zhí)行模塊303即可從該入口地址所對(duì)應(yīng)的存儲(chǔ)空間中存儲(chǔ)的指令,開始執(zhí)行所述被調(diào)用函數(shù),實(shí)現(xiàn)該被調(diào)用函數(shù)的功能。
[0070]進(jìn)一步可選地,所述跳轉(zhuǎn)指令中記錄的目標(biāo)地址為內(nèi)存中空閑空間的地址,所述空閑空間中設(shè)置有配置指令;所述確定模塊302,具體用于根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定出內(nèi)存中設(shè)置的配置指令;根據(jù)所述配置指令,得到被調(diào)用函數(shù)的入口地址。
[0071]進(jìn)一步可選地,所述空閑空間是指:在加載動(dòng)態(tài)庫SO文件時(shí),被SO文件占用的內(nèi)存頁中沒有存儲(chǔ)數(shù)據(jù)的內(nèi)存空間。
[0072]進(jìn)一步可選地,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調(diào)用函數(shù)的入口地址寫入到所述寄存器中。
[0073]進(jìn)一步可選地,所述執(zhí)行模塊303具體用于在執(zhí)行到調(diào)用函數(shù)中的所述跳轉(zhuǎn)指令的下一指令時(shí),讀取所述寄存器中寫入的所述被調(diào)用函數(shù)的入口地址;從所述入口地址開始執(zhí)行所述被調(diào)用函數(shù)。
[0074]進(jìn)一步可選地,本發(fā)明實(shí)施例的所述裝置還可以包括:
[0075]預(yù)置模塊304,用于從應(yīng)用程序中的調(diào)用函數(shù)的首地址開始確定跳轉(zhuǎn)指令,并將確定的跳轉(zhuǎn)指令記錄的地址配置為目標(biāo)地址的偏移地址。
[0076]本發(fā)明實(shí)施例中所述裝置的各個(gè)模塊的具體功能實(shí)現(xiàn)可參考圖1和圖2所對(duì)應(yīng)方法實(shí)施例中相關(guān)步驟的具體的描述,在此不贅述。
[0077]本發(fā)明實(shí)施例能夠通過對(duì)調(diào)用函數(shù)中的跳轉(zhuǎn)指令進(jìn)行配置以及處理,直接跳轉(zhuǎn)到跳轉(zhuǎn)指令指示的目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù),簡(jiǎn)便快捷地實(shí)現(xiàn)有針對(duì)性的函數(shù)跳轉(zhuǎn)調(diào)用,只針對(duì)單個(gè)調(diào)用函數(shù)完成函數(shù)跳轉(zhuǎn)和調(diào)用,不會(huì)影響其他的調(diào)用函數(shù)。
[0078]再請(qǐng)參見圖4,是本發(fā)明實(shí)施例的一種智能終端的結(jié)構(gòu)示意圖,本發(fā)明實(shí)施例的所述智能終端可以包括電源、主板、攝像頭、用戶接口以及外殼等結(jié)構(gòu),進(jìn)一步地,還包括處理器401、存儲(chǔ)器402以及內(nèi)存403。所述處理器401、存儲(chǔ)器402以及內(nèi)存403之間可以通過總線404相連。
[0079]所述總線404可以分為地址總線、數(shù)據(jù)總線、控制總線等。為便于表示,圖4中僅用一條粗線表示,但并不表示僅有一根總線或一種類型的總線。
[0080]所述存儲(chǔ)器402可以包括易失性存儲(chǔ)器(volatile memory),例如隨機(jī)存取存儲(chǔ)器(random-access memory,RAM);存儲(chǔ)器也可以包括非易失性存儲(chǔ)器(non-voIati Iememory ),例如快閃存儲(chǔ)器(flash memory),硬盤(hard disk drive,HDD)或固態(tài)硬盤(solid-state drive,SSD);所述存儲(chǔ)器402還可以包括上述種類的存儲(chǔ)器的組合。
[00811 所述處理器401可以是中央處理器(central processing unit,CPU),所述存儲(chǔ)器402還用于存儲(chǔ)程序指令以及動(dòng)態(tài)庫SO等相關(guān)文件,這些相關(guān)的文件數(shù)據(jù)可以加載到所述內(nèi)存中。所述處理器401可以調(diào)用所述程序指令,實(shí)現(xiàn)一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法。
[0082]具體的,所述處理器401用于在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令用于指示目標(biāo)地址,所述調(diào)用函數(shù)用于使所述應(yīng)用程序從所述調(diào)用函數(shù)跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù);根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址;根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù)。
[0083]其中可選地,所述跳轉(zhuǎn)指令中記錄的目標(biāo)地址為內(nèi)存中空閑空間的地址,所述空閑空間中設(shè)置有配置指令,所述處理器401具體用于根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定出內(nèi)存中設(shè)置的配置指令;根據(jù)所述配置指令,得到被調(diào)用函數(shù)的入口地址。
[0084]其中可選地,所述空閑空間是指:在加載動(dòng)態(tài)庫SO文件時(shí),被SO文件占用的內(nèi)存頁中沒有存儲(chǔ)數(shù)據(jù)的內(nèi)存空間。
[0085]其中可選地,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調(diào)用函數(shù)的入口地址寫入到所述寄存器中。
[0086]其中可選地,所述處理器401具體用于在執(zhí)行到調(diào)用函數(shù)中的所述跳轉(zhuǎn)指令的下一指令時(shí),讀取所述寄存器中寫入的所述被調(diào)用函數(shù)的入口地址;從所述入口地址開始執(zhí)行所述被調(diào)用函數(shù)。
[0087]其中可選地,所述處理器401還用于從應(yīng)用程序中的調(diào)用函數(shù)的首地址開始確定跳轉(zhuǎn)指令,并將確定的跳轉(zhuǎn)指令記錄的地址配置為目標(biāo)地址的偏移地址。
[0088]本發(fā)明實(shí)施例中所述處理器401的具體實(shí)現(xiàn)可參考圖1和圖2所對(duì)應(yīng)方法實(shí)施例中相關(guān)步驟的具體描述,在此不贅述。
[0089]本發(fā)明實(shí)施例能夠通過對(duì)調(diào)用函數(shù)中的跳轉(zhuǎn)指令進(jìn)行配置以及處理,直接跳轉(zhuǎn)到跳轉(zhuǎn)指令指示的目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù),簡(jiǎn)便快捷地實(shí)現(xiàn)有針對(duì)性的函數(shù)跳轉(zhuǎn)調(diào)用,只針對(duì)單個(gè)調(diào)用函數(shù)完成函數(shù)跳轉(zhuǎn)和調(diào)用,不會(huì)影響其他的調(diào)用函數(shù)。
[0090]以上所揭露的僅為本發(fā)明一種較佳實(shí)施例而已,當(dāng)然不能以此來限定本發(fā)明之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分流程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于發(fā)明所涵蓋的范圍。
【主權(quán)項(xiàng)】
1.一種在應(yīng)用程序中的跳轉(zhuǎn)處理方法,其特征在于,包括: 在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令指示有目標(biāo)地址,所述調(diào)用函數(shù)用于使所述應(yīng)用程序從所述調(diào)用函數(shù)跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù); 根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址; 根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù)。2.如權(quán)利要求1所述的方法,其特征在于,所述跳轉(zhuǎn)指令中記錄的目標(biāo)地址為內(nèi)存中空閑空間的地址,所述空閑空間中設(shè)置有配置指令,所述根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址,包括: 根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定出內(nèi)存中設(shè)置的配置指令; 根據(jù)所述配置指令,得到被調(diào)用函數(shù)的入口地址。3.如權(quán)利要求2所述的方法,其特征在于,所述空閑空間是指:在加載動(dòng)態(tài)庫SO文件時(shí),被SO文件占用的內(nèi)存頁中沒有存儲(chǔ)數(shù)據(jù)的內(nèi)存空間。4.如權(quán)利要求2或3所述的方法,其特征在于,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調(diào)用函數(shù)的入口地址寫入到所述寄存器中。5.如權(quán)利要求4所述的方法,其特征在于,所述根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù),包括: 在執(zhí)行到調(diào)用函數(shù)中的所述跳轉(zhuǎn)指令的下一指令時(shí),讀取所述寄存器中寫入的所述被調(diào)用函數(shù)的入口地址; 從所述入口地址開始執(zhí)行所述被調(diào)用函數(shù)。6.如權(quán)利要求1所述的方法,其特征在于,所述在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令之前,還包括: 從應(yīng)用程序中的調(diào)用函數(shù)的首地址開始確定跳轉(zhuǎn)指令,并將確定的跳轉(zhuǎn)指令記錄的地址配置為目標(biāo)地址的偏移地址。7.一種在應(yīng)用程序中的跳轉(zhuǎn)處理裝置,其特征在于,包括: 獲取模塊,用于在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令用于指示目標(biāo)地址,所述調(diào)用函數(shù)用于使所述應(yīng)用程序從所述調(diào)用函數(shù)跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù); 確定模塊,用于根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址; 執(zhí)行模塊,用于根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù)。8.如權(quán)利要求7所述的裝置,其特征在于,所述跳轉(zhuǎn)指令中記錄的目標(biāo)地址為內(nèi)存中空閑空間的地址,所述空閑空間中設(shè)置有配置指令; 所述確定模塊,具體用于根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定出內(nèi)存中設(shè)置的配置指令;根據(jù)所述配置指令,得到被調(diào)用函數(shù)的入口地址。9.如權(quán)利要求8所述的裝置,其特征在于,所述空閑空間是指:在加載動(dòng)態(tài)庫SO文件時(shí),被SO文件占用的內(nèi)存頁中沒有存儲(chǔ)數(shù)據(jù)的內(nèi)存空間。10.如權(quán)利要求8或9所述的裝置,其特征在于,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調(diào)用函數(shù)的入口地址寫入到所述寄存器中。11.如權(quán)利要求10所述的裝置,其特征在于, 所述執(zhí)行模塊具體用于在執(zhí)行到調(diào)用函數(shù)中的所述跳轉(zhuǎn)指令的下一指令時(shí),讀取所述寄存器中寫入的所述被調(diào)用函數(shù)的入口地址;從所述入口地址開始執(zhí)行所述被調(diào)用函數(shù)。12.如權(quán)利要求7所述的裝置,其特征在于,還包括: 預(yù)置模塊,用于從應(yīng)用程序中的調(diào)用函數(shù)的首地址開始確定跳轉(zhuǎn)指令,并將確定的跳轉(zhuǎn)指令記錄的地址配置為目標(biāo)地址的偏移地址。13.一種智能終端,其特征在于,包括處理器; 所述處理器,用于在執(zhí)行到應(yīng)用程序中的調(diào)用函數(shù)時(shí),獲取所述調(diào)用函數(shù)中的跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令用于指示目標(biāo)地址,所述調(diào)用函數(shù)用于使所述應(yīng)用程序從所述調(diào)用函數(shù)跳轉(zhuǎn)到所述目標(biāo)地址所關(guān)聯(lián)的被調(diào)用函數(shù);根據(jù)所述跳轉(zhuǎn)指令中的目標(biāo)地址確定被調(diào)用函數(shù)的入口地址;根據(jù)確定的入口地址開始執(zhí)行所述被調(diào)用函數(shù)。
【文檔編號(hào)】G06F9/44GK106095416SQ201610382640
【公開日】2016年11月9日
【申請(qǐng)日】2016年6月1日 公開號(hào)201610382640.2, CN 106095416 A, CN 106095416A, CN 201610382640, CN-A-106095416, CN106095416 A, CN106095416A, CN201610382640, CN201610382640.2
【發(fā)明人】彭畢雨, 王波, 王俊俊, 陳禮娟
【申請(qǐng)人】騰訊科技(深圳)有限公司