[發明專利]一種函數調用的方法、裝置及終端有效
| 申請號: | 201810575335.4 | 申請日: | 2018-06-06 |
| 公開(公告)號: | CN108920220B | 公開(公告)日: | 2021-11-30 |
| 發明(設計)人: | 易新 | 申請(專利權)人: | 北京奇虎科技有限公司 |
| 主分類號: | G06F9/448 | 分類號: | G06F9/448;G06F9/455 |
| 代理公司: | 北京律誠同業知識產權代理有限公司 11006 | 代理人: | 王玉雙 |
| 地址: | 100088 北京市西城區新*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 函數 調用 方法 裝置 終端 | ||
1.一種函數調用的方法,其特征在于,所述方法包括:
獲取校驗函數的名稱,所述校驗函數用于校驗系統虛擬機中待調用函數對應的結構體的訪問標志位,所述待調用函數為所述系統本身的應用程序接口API函數;
基于所述校驗函數的名稱確定所述校驗函數的實際地址;
基于所述校驗函數的實際地址,利用內聯掛鉤函數對所述校驗函數進行修改,使得所述校驗函數對所述訪問標志位進行校驗后,能夠允許應用程序訪問并調用所述待調用函數;
所述基于所述校驗函數的實際地址,利用內聯掛鉤函數對所述校驗函數進行修改,包括:
基于所述校驗函數的地址,利用所述內聯掛鉤函數將所述校驗函數的調用函數Method替換成自定義調用函數;以及,
利用所述內聯掛鉤函數將所述校驗函數的反射函數Field替換成自定義反射函數,當執行所述校驗函數時,使得所述校驗函數的校驗返回值為預設的返回值。
2.如權利要求1所述的方法,其特征在于,所述基于所述校驗函數的名稱確定所述校驗函數的實際地址,包括:
基于所述校驗函數的名稱,在虛擬機本地庫libart.so中查找所述校驗函數的符號名稱;
根據所述符號名稱確定所述校驗函數的虛擬地址;
獲取所述虛擬機本地庫libart.so的基址;
根據所述校驗函數的虛擬地址及所述虛擬機本地庫libart.so的基址確定所述校驗函數的實際地址。
3.如權利要求2所述的方法,其特征在于,所述根據所述符號名稱確定所述校驗函數的虛擬地址,包括:
對所述虛擬機本地庫libart.so中校驗函數的文件格式進行解析,獲取所述虛擬機本地庫libart.so的符號表;
在所述符號表中,根據所述符號名稱查找所述校驗函數的虛擬地址。
4.如權利要求1所述的方法,其特征在于,所述利用所述內聯掛鉤函數將所述校驗函數的調用函數Method替換成自定義調用函數,包括:
確定所述調用函數Method在所述校驗函數中的第一起始地址;
利用所述內聯掛鉤函數在所述第一起始地址的頭字節中配置用于進行跳轉的第一jmp指令;
當執行所述調用函數Method時,基于所述第一jmp指令,跳轉至所述自定義調用函數。
5.如權利要求1所述的方法,其特征在于,利用所述內聯掛鉤函數將所述校驗函數的反射函數Field替換成自定義反射函數,包括:
確定所述反射函數Field在所述校驗函數中的第二起始地址;
利用所述內聯掛鉤函數在所述第二起始地址的頭字節中配置用于進行跳轉的第二jmp指令;
當執行所述反射函數Field時,基于所述第二jmp指令,跳轉至所述自定義反射函數。
6.一種函數調用的裝置,其特征在于,所述裝置包括:
獲取單元,用于獲取校驗函數的名稱,所述校驗函數用于校驗系統虛擬機中待調用函數對應的結構體的訪問標志位,所述待調用函數為所述系統本身的應用程序接口API函數;
確定單元,用于基于所述校驗函數的名稱確定所述校驗函數的實際地址;
修改單元,用于基于所述校驗函數的實際地址,利用內聯掛鉤函數對所述校驗函數進行修改,使得所述校驗函數對所述訪問標志位進行校驗后,能夠允許應用程序訪問并調用所述待調用函數;
所述修改單元具體用于:
基于所述校驗函數的地址,利用所述內聯掛鉤函數將所述校驗函數的調用函數Method替換成自定義調用函數;以及,
利用所述內聯掛鉤函數將所述校驗函數的反射函數Field替換成自定義反射函數,當執行所述校驗函數時,使得所述校驗函數的校驗返回值為預設的返回值。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京奇虎科技有限公司,未經北京奇虎科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201810575335.4/1.html,轉載請聲明來源鉆瓜專利網。





