函數(shù)的調(diào)用方法、裝置及終端的制作方法
【技術(shù)領(lǐng)域】
[0001] 本公開(kāi)涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種函數(shù)的調(diào)用方法、裝置及終端。
【背景技術(shù)】
[0002] 相關(guān)技術(shù)中,用戶在使用某些平臺(tái)的C/C++動(dòng)態(tài)數(shù)據(jù)庫(kù)的時(shí)候,能夠獲知公有函數(shù) 的實(shí)現(xiàn)方式,但是用戶沒(méi)有權(quán)限獲知私有函數(shù)的實(shí)現(xiàn)方式,也就不能夠使用數(shù)據(jù)庫(kù)中的私 有函數(shù),這就給用戶帶來(lái)了不便。
【發(fā)明內(nèi)容】
[0003] 為克服相關(guān)技術(shù)中存在的問(wèn)題,本公開(kāi)提供了一種函數(shù)的調(diào)用方法及裝置。
[0004] 根據(jù)本公開(kāi)實(shí)施例的第一方面,提供一種函數(shù)的調(diào)用方法,包括:
[0005] 對(duì)動(dòng)態(tài)庫(kù)進(jìn)行反匯編,得到匯編代碼;
[0006] 從所述匯編代碼中獲取公有函數(shù)的第一偏移地址及待調(diào)用的私有函數(shù)的第二偏 移地址;
[0007] 基于所述公有函數(shù)的第一地址、所述第一偏移地址和所述第二偏移地址確定所述 私有函數(shù)的第二地址;
[0008] 基于所述第二地址對(duì)所述私有函數(shù)進(jìn)行調(diào)用。
[0009] 可選的,所述基于所述公有函數(shù)的第一地址、所述第一偏移地址和所述第二偏移 地址確定所述私有函數(shù)的第二地址之前,所述方法還包括:
[0010] 運(yùn)行所述動(dòng)態(tài)庫(kù),得到所述公有函數(shù)的第一地址。
[0011] 可選的,所述從所述匯編代碼中獲取公有函數(shù)的第一偏移地址及待調(diào)用的私有函 數(shù)的第二偏移地址,包括:
[0012] 基于所述公有函數(shù)和所述待調(diào)用的私有函數(shù)的名稱,分別從所述匯編代碼中查找 所述公有函數(shù)的第一偏移地址,以及所述私有函數(shù)的第二偏移地址。
[0013] 可選的,所述基于所述公有函數(shù)的第一地址、所述第一偏移地址和所述第二偏移 地址確定所述私有函數(shù)的第二地址,包括:
[0014] 基于所述公有函數(shù)的第一地址及所述公有函數(shù)的第一偏移地址,確定所述動(dòng)態(tài)庫(kù) 的庫(kù)函數(shù)的起始地址;
[0015] 基于所述庫(kù)函數(shù)的起始地址和所述私有函數(shù)的第二偏移地址,確定所述私有函數(shù) 的第二地址。
[0016] 根據(jù)本公開(kāi)實(shí)施例的第二方面,提供一種函數(shù)的調(diào)用裝置,包括:
[0017]反匯編模塊,被配置為對(duì)動(dòng)態(tài)庫(kù)進(jìn)行反匯編,得到匯編代碼;
[0018] 獲取模塊,被配置為從所述匯編代碼中獲取公有函數(shù)的第一偏移地址及待調(diào)用的 私有函數(shù)的第二偏移地址;
[0019] 確定模塊,被配置為基于所述公有函數(shù)的第一地址、所述第一偏移地址和所述第 二偏移地址確定所述私有函數(shù)的第二地址;
[0020] 調(diào)用模塊,被配置為基于所述第二地址對(duì)所述私有函數(shù)進(jìn)行調(diào)用。
[0021] 可選的,所述裝置還包括:
[0022] 運(yùn)行模塊,被配置為運(yùn)行所述動(dòng)態(tài)庫(kù),得到所述公有函數(shù)的第一地址。
[0023]可選的,所述獲取模塊包括:
[0024]查找子模塊,被配置為基于所述公有函數(shù)和所述待調(diào)用的私有函數(shù)的名稱,分別 從所述匯編代碼中查找所述公有函數(shù)的第一偏移地址,以及所述私有函數(shù)的第二偏移地 址。
[0025]可選的,所述確定模塊包括:
[0026] 第一確定子模塊,被配置為基于所述公有函數(shù)的第一地址及所述公有函數(shù)的第一 偏移地址,確定所述動(dòng)態(tài)庫(kù)的庫(kù)函數(shù)的起始地址;
[0027] 第二確定子模塊,被配置為基于所述庫(kù)函數(shù)的起始地址和所述私有函數(shù)的第二偏 移地址,確定所述私有函數(shù)的第二地址。
[0028]根據(jù)本公開(kāi)實(shí)施例的第三方面,提供一種終端,包括:處理器;用于存儲(chǔ)處理器可 執(zhí)行指令的存儲(chǔ)器;其中,所述處理器被配置為:
[0029] 對(duì)動(dòng)態(tài)庫(kù)進(jìn)行反匯編,得到匯編代碼;
[0030] 從所述匯編代碼中獲取公有函數(shù)的第一偏移地址及待調(diào)用的私有函數(shù)的第二偏 移地址;
[0031 ]基于所述公有函數(shù)的第一地址、所述第一偏移地址和所述第二偏移地址確定所述 私有函數(shù)的第二地址;
[0032] 基于所述第二地址對(duì)所述私有函數(shù)進(jìn)行調(diào)用。
[0033] 本公開(kāi)的實(shí)施例提供的技術(shù)方案可以包括以下有益效果:
[0034] 本公開(kāi)中終端通過(guò)對(duì)動(dòng)態(tài)庫(kù)進(jìn)行反匯編,從得到的匯編代碼中獲取公有函數(shù)及私 有函數(shù)的偏移地址,再根據(jù)公有函數(shù)的第一地址就能夠計(jì)算出私有函數(shù)的第二地址,從而 基于第二地址能夠?qū)崿F(xiàn)對(duì)私有函數(shù)的調(diào)用,使得終端的程序更具有健壯性。
[0035] 本公開(kāi)中終端可以通過(guò)運(yùn)行動(dòng)態(tài)庫(kù)得到公有函數(shù)的第一地址。
[0036] 本公開(kāi)中終端可以基于公有函數(shù)的名稱及私有函數(shù)的名稱去匯編代碼中查找公 有函數(shù)的第一偏移地址及私有函數(shù)的第二偏移地址,以便計(jì)算私有函數(shù)的第二地址。
[0037] 本公開(kāi)中終端可以通過(guò)公有函數(shù)的第一地址和第一偏移地址計(jì)算庫(kù)函數(shù)的起始 地址,再基于庫(kù)函數(shù)的起始地址和私有函數(shù)的第二地址計(jì)算私有函數(shù)的第二地址,從而實(shí) 現(xiàn)對(duì)私有函數(shù)的調(diào)用,該方法易于實(shí)現(xiàn),且提高了終端運(yùn)行程序的健壯性。
[0038] 應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不 能限制本公開(kāi)。
【附圖說(shuō)明】
[0039]此處的附圖被并入說(shuō)明書(shū)中并構(gòu)成本說(shuō)明書(shū)的一部分,示出了符合本公開(kāi)的實(shí)施 例,并與說(shuō)明書(shū)一起用于解釋本公開(kāi)的原理。
[0040] 圖1是本公開(kāi)根據(jù)一示例性實(shí)施例示出的一種函數(shù)的調(diào)用方法流程圖。
[0041] 圖2是本公開(kāi)根據(jù)一示例性實(shí)施例示出的另一種函數(shù)的調(diào)用方法流程圖。
[0042] 圖3是本公開(kāi)根據(jù)一示例性實(shí)施例示出的一種函數(shù)的調(diào)用方法的應(yīng)用場(chǎng)景示意 圖。
[0043]圖4是本公開(kāi)根據(jù)一示例性實(shí)施例示出的一種函數(shù)的調(diào)用裝置框圖。
[0044]圖5是本公開(kāi)根據(jù)一示例性實(shí)施例示出的另一種函數(shù)的調(diào)用裝置框圖。
[0045] 圖6是本公開(kāi)根據(jù)一示例性實(shí)施例示出的另一種函數(shù)的調(diào)用裝置框圖。
[0046] 圖7是本公開(kāi)根據(jù)一示例性實(shí)施例示出的另一種函數(shù)的調(diào)用裝置框圖。
[0047] 圖8是本公開(kāi)根據(jù)一示例性實(shí)施例示出的一種用于函數(shù)的調(diào)用裝置的一結(jié)構(gòu)示意 圖。
【具體實(shí)施方式】
[0048] 這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說(shuō)明,其示例表示在附圖中。下面的描述涉及 附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例 中所描述的實(shí)施方式并不代表與本公開(kāi)相一致的所有實(shí)施方式。相反,它們僅是與如所附 權(quán)利要求書(shū)中所詳述的、本公開(kāi)的一些方面相一致的裝置和方法的例子。
[0049] 在本公開(kāi)使用的術(shù)語(yǔ)是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本公開(kāi)。 在本公開(kāi)和所附權(quán)利要求書(shū)中所使用的單數(shù)形式的"一種"、"所述"和"該"也旨在包括多數(shù) 形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語(yǔ)"和/或"是指并包 含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
[0050] 應(yīng)當(dāng)理解,盡管在本公開(kāi)可能采用術(shù)語(yǔ)第一、第二、第三等來(lái)描述各種信息,但這 些信息不應(yīng)限于這些術(shù)語(yǔ)。這些術(shù)語(yǔ)僅用來(lái)將同一類型的信息彼此區(qū)分開(kāi)。例如,在不脫離 本公開(kāi)范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第 一信息。取決于語(yǔ)境,如在此所使用的詞語(yǔ)"如果"可以被解釋成為"在……時(shí)"或"當(dāng)…… 時(shí)"或"響應(yīng)于確定"。
[0051] 如圖1所示,圖1是根據(jù)一示例性實(shí)施例示出的一種函數(shù)的調(diào)用方法流程圖,該方 法可以用于終端中,包括以下步驟:
[0052] 步驟101、對(duì)動(dòng)態(tài)庫(kù)進(jìn)行反匯編,得到匯編代碼。
[0053] 本公開(kāi)中的終端可以是任何具有上網(wǎng)功能的智能終端,例如,可以具體為手機(jī)、平 板電腦、PDA(Personal Digital Assistant,個(gè)人數(shù)字助理)等。其中,終端可以通過(guò)無(wú)線局 域網(wǎng)接入路由器,并通過(guò)路由器訪問(wèn)公網(wǎng)上的服務(wù)器。
[0054]本公開(kāi)實(shí)施例中的動(dòng)態(tài)庫(kù)即用戶使用的平臺(tái)的c/c++動(dòng)態(tài)庫(kù),例如google的動(dòng)態(tài) 數(shù)據(jù)庫(kù),其中包含有用戶能夠直接使用的公有函數(shù)和用戶想要使用但無(wú)法使用的私有函 數(shù)。
[0055] 其中,匯編代碼中帶有public(公有)的類成員為公有函數(shù),能夠被該類的所有成 員所訪問(wèn),也就是說(shuō)能夠利用對(duì)象來(lái)直接調(diào)用;帶有private(私有)的類成員為私有函數(shù), 不能被對(duì)象直接訪問(wèn)。
[0056] 本公開(kāi)實(shí)施例中采用的反匯編方法可以為相關(guān)技術(shù)中常用的反匯編技術(shù),例如 IDA(Interactive Disassembler,交互式反匯編)等。
[0057]步驟102、從匯編代碼中獲取公有函數(shù)的第一偏移地址及待調(diào)用的私有函數(shù)的第 二偏移地址。
[0058]在反匯編得到的匯編代碼中,基于公有函數(shù)的名稱能夠得到公有函數(shù)的偏移地 址,這里稱之為第一偏移地址,基于私有函數(shù)的名稱能夠得到私有函數(shù)的偏移地址,這里稱 之為第二偏移地址。
[0059] 步驟103、基于公有函數(shù)的第一地址、第一偏移地址和第二偏移地址確定私有函數(shù) 的第二地址。
[0060] 其中第一地址可以理解為公有函數(shù)能夠被調(diào)用的真正地址,第二地址可以理解為 私有函數(shù)能夠被調(diào)用的真正地址。
[0061] 步驟104、基于第二地址對(duì)私