[發明專利]一種IOS運行異常的保護方法、裝置、終端設備及存儲介質有效
| 申請號: | 201811143337.2 | 申請日: | 2018-09-28 |
| 公開(公告)號: | CN109408265B | 公開(公告)日: | 2022-05-10 |
| 發明(設計)人: | 陳俊城 | 申請(專利權)人: | 廣州虎牙信息科技有限公司 |
| 主分類號: | G06F11/07 | 分類號: | G06F11/07;G06F11/30 |
| 代理公司: | 北京博思佳知識產權代理有限公司 11415 | 代理人: | 林祥 |
| 地址: | 511446 廣東省廣州市番禺區南村鎮萬博二*** | 國省代碼: | 廣東;44 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 ios 運行 異常 保護 方法 裝置 終端設備 存儲 介質 | ||
1.一種IOS運行異常的保護方法,其特征在于,包括:
接收指令,判斷是否存在執行指令的方法;
若不存在所述執行指令的方法,在容器中添加執行指令的方法名稱和目標類的名稱,將所述指令轉發給所述容器;
在所述容器中匹配所述目標類的名稱和所述執行指令的方法名稱,所述容器向應用程序返回一個非空值;
獲取并保存執行指令時所有線程的方法調用棧,其中,所述所有線程為當前應用程序中存在的全部線程;
將目標數據發送到服務器,其中,所述目標數據包括方法調用棧、目標類的名稱、執行指令的方法名稱和當前頁面的類名。
2.根據權利要求1所述的方法,其特征在于,所述判斷是否存在執行指令的方法,具體包括:
調用Objc_msgSend方法在目標類的方法列表中查找與所述指令對應的所述執行指令的方法;
若存在所述執行指令的方法,則使用所述執行指令的方法執行指令。
3.根據權利要求2所述的方法,其特征在于,所述調用Objc_msgSend方法在所述方法列表中查找與所述指令對應的所述執行指令的方法,包括:
若存在所述執行指令的方法,將存放所述指令的入口地址與所述執行指令的方法進行動態綁定;
objc_msgSend將其在目標類中查找到的所述執行指令的方法緩存在映射表中,所述映射表用來存放所述執行指令的方法和所述指令的入口地址的映射關系;
當再次接收到所述指令時,從所述映射表中調用所述執行指令的方法。
4.根據權利要求1所述的方法,其特征在于,若不存在所述執行指令的方法,在容器中添加執行指令的方法名稱和目標類的名稱,將所述指令轉發給所述容器,具體包括:
若所述目標類中不存在所述執行指令的方法,沿著繼承體系在當前目標類的父類中繼續查找,所述目標類繼承于所述父類;
若在所述父類中找到與所述指令對應的所述執行指令的方法,則使用所述執行指令的方法執行指令并停止查找所述執行指令的方法;
若所述父類中仍不存在所述執行指令的方法,則在容器中添加執行指令的方法名稱和目標類的名稱,將所述指令轉發給所述容器。
5.根據權利要求1所述的方法,其特征在于,所述獲取并保存執行指令時所有線程的方法調用棧,具體包括:
通過task_threads函數獲取所述所有線程;
通過幀指針和棧指針獲取所述所有線程的方法調用棧;
將獲取到的所述所有線程的方法調用棧保存在記錄表中。
6.一種IOS運行異常的保護裝置,其特征在于,包括:
判斷模塊,被配置為判斷是否存在執行指令的方法;
轉發模塊,被配置為若不存在所述執行指令的方法,在容器中添加執行指令的方法名稱和目標類的名稱,將所述指令轉發給所述容器;
匹配模塊,被配置為在所述容器中匹配所述目標類的名稱和所述執行指令的方法名稱,所述容器向應用程序返回一個非空值;
獲取模塊,被配置為獲取并保存執行指令時所有線程的方法調用棧,其中,所述所有線程為當前應用程序中存在的全部線程;
發送模塊,被配置為將目標數據發送到服務器,其中,所述目標數據包括方法調用棧、目標類的名稱、執行指令的方法名稱和當前頁面的類名。
7.根據權利要求6所述的裝置,其特征在于,所述判斷是否存在執行指令的方法,具體包括:
接收指令,調用Objc_msgSend方法在目標類的方法列表中查找與所述指令對應的所述執行指令的方法;
若存在所述執行指令的方法,則使用所述執行指令的方法執行指令。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于廣州虎牙信息科技有限公司,未經廣州虎牙信息科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201811143337.2/1.html,轉載請聲明來源鉆瓜專利網。





