[發明專利]一種函數掛鉤實現方法、裝置和存儲介質有效
| 申請號: | 201810041219.4 | 申請日: | 2018-01-16 |
| 公開(公告)號: | CN110046497B | 公開(公告)日: | 2023-06-20 |
| 發明(設計)人: | 劉華星 | 申請(專利權)人: | 騰訊科技(深圳)有限公司 |
| 主分類號: | G06F21/54 | 分類號: | G06F21/54 |
| 代理公司: | 深圳翼盛智成知識產權事務所(普通合伙) 44300 | 代理人: | 黃威 |
| 地址: | 518057 廣東省深圳*** | 國省代碼: | 廣東;44 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 函數 掛鉤 實現 方法 裝置 存儲 介質 | ||
1.一種函數掛鉤實現方法,其特征在于,所述方法包括:
在ART系統中創建空的方法對象,并將被掛鉤函數的函數信息備份至所述方法對象中,所述函數信息包括所述被掛鉤函數的頭兩條指令,所述ART系統為安卓應用運行系統;
將所述被掛鉤函數中的頭兩條指令修改為跳轉指令,所述跳轉指令用于指示跳轉至執行自定義掛鉤函數;
在所述方法對象中設置回調指令,所述回調指令位于所述頭兩條指令之后,用于指示跳轉執行所述被掛鉤函數中所述頭兩條指令的后續指令;
獲取所述被掛鉤函數的函數位置屬性相對于所述被掛鉤函數頭的第一地址偏移;
根據所述第一地址偏移、以及所述被掛鉤函數的調用地址屬性相對于所述函數位置屬性的第二偏移值,獲取所述被掛鉤函數的調用地址屬性相對于所述被掛鉤函數頭的第三地址偏移;
根據所述第三地址偏移獲取所述被掛鉤函數的調用地址屬性;
將所述被掛鉤函數的調用地址屬性修改為所述自定義掛鉤函數的調用地址屬性,所述被掛鉤函數的調用地址屬性保存有所述被掛鉤函數的函數入口地址;
當調用所述被掛鉤函數時,根據所述跳轉指令跳轉至執行所述自定義掛鉤函數;
在所述自定義掛鉤函數執行完成時,跳轉至執行所述方法對象中的所述頭兩條指令,并根據所述回調指令跳轉至執行所述被掛鉤函數中的所述后續指令。
2.如權利要求1所述的函數掛鉤實現方法,其特征在于,所述函數信息還包括所述被掛鉤函數的函數頭信息,所述方法對象的函數頭信息為所述被掛鉤函數的函數頭信息;
在將被掛鉤函數的函數信息備份至所述方法對象中之后,所述函數掛鉤實現方法還包括:
根據所述被掛鉤函數的函數入口地址和所述方法對象的函數入口地址,對所述方法對象的函數頭信息中的函數符號表偏移進行修正。
3.如權利要求1所述的函數掛鉤實現方法,其特征在于,在ART系統中創建空的方法對象,包括:
在ART系統創建一個類,并在所述類中創建兩個空的測試方法對象;
獲取所述測試方法對象之間的地址差;
根據所述地址差在所述ART系統中創建空的方法對象。
4.如權利要求1所述的函數掛鉤實現方法,其特征在于,所述函數掛鉤實現方法還包括:
在處理堆棧信息時,判斷寄存器參數值是否落入所述被掛鉤函數的指令地址范圍內;
若是,則根據所述方法對象與被掛鉤函數之間的入口地址差,對所述寄存器參數值進行修正。
5.如權利要求1所述的函數掛鉤實現方法,其特征在于,所述ART系統包括本地層和應用層;所述在ART系統中創建空的方法對象,并將被掛鉤函數的函數信息備份至所述方法對象中,包括:
在ART系統的本地層創建空的方法對象;
將所述被掛鉤函數的函數信息備份至本地層的所述方法對象;
將所述方法對象對應的指針信息保存在所述應用層。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于騰訊科技(深圳)有限公司,未經騰訊科技(深圳)有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201810041219.4/1.html,轉載請聲明來源鉆瓜專利網。





