原创 找出數組中不是成對出現的元素

題目:假設數組中的元素只有一個不是成對出現的,找出該元素(下標).   思路: 1. 設置一個輔助數組result,來標記數組中已經被查找的成對元素,防止重複查找; 2. 遍歷當前數組的元素,針對下標爲i的元素: 2.1 如果resul

原创 fishhook------源碼解讀

  在  fishhook------原理分析 中,驗證了fishhook符號重綁定的實現原理,這裏主要分析一下fishhook的代碼實現. 準備 理論知識 Mach-O的文件佈局 Mach-O文件一共有三個部分: Header:head

原创 iOS Crash異常日誌符號化

異常日誌符號化 一般情況下如果我們可以通過Xcode來查看異常日誌的話,獲取到的異常日誌都是符號化之後,可以直接查看並定位異常.但是如果在測試階段需要從手機上導出異常日誌,或者集成了第三方異常收集但是未能上傳符號表到對應的後臺等情況下就只

原创 iOS Crash異常日誌收集

異常日誌的產生與存儲 任何一款應用在使用過程中出現各種異常問題在所難免,如何能快速還原場景定位異常,對於能否及時修復問題非常重要.在apple的文檔中我們發現了這樣一張圖,完整地描述了應用的整個流程: 編譯器將源代碼編譯成機器代碼的過

原创 時間的獲取方法

date是shell中一個很重要的類,在很多場景中都會用到,例如使用時間戳作爲文件名防止衝突,使用時間字符串來記錄操作日誌等。 常用的時間操作大概有以下使用方式: 以2020年1月3日(星期五)爲例: # 獲取星期 %a 當前loc

原创 應用代碼注入

瞭解了對砸殼應用重簽名之後,發現在一些應用中做了對bundle identifier的校驗,自定的bundle identifer並不能通過校驗,這時候就需要嘗試添加一些代碼了.以下討論接着應用重簽名中QQ的重簽名繼續. 準備 在iOS的

原创 isa_t

isa_t作用 在OC的類結構中出現的第一個成員變量就是聯合體isa_t struct objc_object { private: isa_t isa; //在早期的版本中isa只是一個Class類型的指針 //Class _

原创 共用體與位域

C語言中除了結構體,還有一種很重要的結構,叫做共用體(Union). 共用體定義 共用體(Union)是C語言中一個特殊的數據類型,可以在相同的內存位置存儲不同的數據類型,可以定義一個或者多個成員變量的共用體,但是在指定時刻,只能有一個成

原创 weak實現原理

在ARC模式中weak關鍵字常常用來處理對象之間的互相強引用導致的內存泄漏問題,主要是因爲使用weak修飾變量不會導致引用計數的增加不會影響對象的生命週期,而且在對象釋放之後會將自動指針置空避免也指針訪問問題.那麼系統是和實現weak管理

原创 iOS 13.x獲取通訊錄信息時的注意事項

之前的項目兼容的版本在iOS9.0以上,所以在項目中使用了CNContacts框架獲取用戶的通訊錄信息,大致的實現如下: /// 判斷字符串是否可用 /// 輔助函數 /// @param str 原始對象 BOOL isAvailab

原创 對象引用計數保存在哪裏?

在64bit操作系統中,apple對對象中的isa進行了優化使用isa_t結構來保存關於對象的更多信息. # if __arm64__ # define ISA_MASK 0x0000000ffffffff8ULL #

原创 類結構中的class_rw_t與class_ro_t

在OC的類結構中,存在這樣的結構: struct objc_class : objc_object { // Class ISA; Class superclass; cache_t cache;

原创 對象釋放時都幹了些啥?

在之前的介紹isa_t時,曾經提起isa中存儲了has_cxx_dtor信息,如果對象不包含該標誌,釋放時速度會更快一些.這說明在對象釋放時並不是簡單的進行對象空間的釋放,應該會還有一些額外的輔助操作. 使用objc4-756.2源代碼進

原创 Category同名函數如何調用原來實現

Category中是原生開發中經常用到的一個技術實現,利用這一技術可以在不知道原始類實現的情況的情況下未類添加屬性和方法實現,可以很好對類功能進行擴展.本文主要討論兩個問題: Category中的實現如何附加到對應類中; Category

原创 微信分享出現 未認證應用

微信在2019年年底更新了sdk使用universal link進行應用間回調傳值,並在2020年年初呼籲開發者更新,同時聲明在3.30之後開始對使用舊版本微信sdk的應用開始標註"未認證應用",並在6.1之後逐步限制舊版本sdk的使用.