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