iOS 如何找到野指針

前言

本文參考 騰訊bugly陳其鋒 大佬的文章實(shí)現(xiàn)的

原理

1.hook住free方法
2.先獲取自己保留的內(nèi)存的大小,如果將要達(dá)到自己設(shè)置的內(nèi)存閾值,則釋放掉一些內(nèi)存
如果沒有達(dá)到閾值,則判斷當(dāng)前要釋放的內(nèi)存大小是否小于所剩內(nèi)存,如果超出則走free方法
如果沒有超出,則判斷是否是OC類和是否是已經(jīng)在運(yùn)行時(shí)環(huán)境中已注冊(cè)的所有類里面
如果不是則走free方法
如果是,則內(nèi)存上填充0x55,在將自己定義的僵尸類的isa賦值過去,最后記錄原來的類
3.因?yàn)閒ree方法是要釋放內(nèi)存,所以我們把這塊內(nèi)存指向我們的僵尸對(duì)象是沒有問題的,但同時(shí)要考慮內(nèi)存的問題,所以在內(nèi)存緊張的時(shí)候,我們要釋放掉一些內(nèi)存。

git代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • iOS 底層原理 文章匯總[http://www.itdecent.cn/p/412b20d9a0f6] 本文主...
    Style_月月閱讀 3,573評(píng)論 0 17
  • 一. 前言 最近被指派去解決一些線上的崩潰問題,經(jīng)常遇到野指針導(dǎo)致的崩潰。相對(duì)于其他的原因引起的崩潰來說,野指針導(dǎo)...
    林大鵬閱讀 21,247評(píng)論 24 136
  • 成因 野指針就是指向一個(gè)已刪除的對(duì)象或者受限內(nèi)存區(qū)域的指針。我們寫C++的時(shí)候強(qiáng)調(diào)指針初始化為NULL,強(qiáng)調(diào)用完后...
    上官soyo閱讀 21,284評(píng)論 4 80
  • 異常分類 軟件異常(OC異常) 主要來源于 kill() 、 pthread_kill() 兩個(gè) API 的調(diào)用,...
    conowen閱讀 2,471評(píng)論 1 1
  • 最近在調(diào)研野指針的定位工具,對(duì)野指針有了更深入的理解,寫篇文章總結(jié)下。 一、那什么是野指針?這是維基百科上的定義:...
    ch32053閱讀 5,597評(píng)論 0 4

友情鏈接更多精彩內(nèi)容