原创 流年笑擲,未來可期——2021年終總結

明天就是大年二十九,今年比較特殊沒有臘月三十,因此明天晚上就是除夕夜。年終總結已經醞釀了很久了,但是遲遲沒有動筆,主要原因是年底被腰間盤突出困擾,正在靜養無法久坐。回顧2021年,有高光也有黯然,有過付出,也有過收穫,有躊躇不前的猶豫,也有

原创 逆向學習筆記 環境 實戰演練 總結

前言:本文適合像筆者一樣,對逆向幾乎零基礎的同學閱讀 一點小建議:環境這塊快速略過,能正常使用就行,無需過分糾結。 環境 越獄 如何越獄 通過體驗,目前iOS 14及以前使用愛思助手即可實現一鍵越獄。遇到的坑: unc0ver越獄默

原创 iOS 線上野指針探測實踐與展望

爲啥要做線上探測 iOS的常規崩潰數量已經不多,剩餘的崩潰往往是不能穩定復現或缺乏有效信息。經過線上統計後我發現目前剩餘的無法定位和解決的崩潰有60%+都是由於野指針引起。各種各樣的堆棧千奇百怪,比較典型的堆棧如下: 當然還有其他類型的堆

原创 皮拉夫大王的1815天

2017年 3月7日,我入職58當天拍的工位照片,當時是工位還在A1樓5層。 17年一個普普通通的夜晚,9點之後打車回家,初來乍到不敢打快車,只敢拼車,到家已經快11點。 剛入職就趕上了部門的王者大賽,我主動參加了一個隊伍,胡老闆作爲隊

原创 從野指針探測到對iOS 15 bind 的探索

從野指針探測說起 前段時間58旗下本地版APP上出現了較多的野指針崩潰,崩潰堆棧沒有太多有效信息,只是告訴崩潰發生在自動釋放池釋放對象的時候。 相關問題極難復現,在開發階段我們先後開啓了zombie、scribble和AddressSan

原创 58同城iOS混編項目無用代碼檢測方案介紹

摘要:本文主要介紹如何通過對Mach-O文件的解析以及反彙編的應用實現OC&Swift的無用代碼檢測,重點介紹Swift的檢測方案。本文作爲Swift Mach-O的應用篇,建議先閱讀《從Mach-O角度談談Swift和OC的存儲差異》和

原创 DWARF文件初探——提取輕量符號表

前言 不知道大家有沒有用過bugly,bugly提供了一種從dSYM文件中抽取輕量符號表的功能,生成的符號表更加小巧,而且保留了地址和符號的映射關係,日誌解析後仍然可以精確到行號。 可讀符號表解壓打開後如下: Symbol table: 5

原创 bugly符號表無損壓縮,減少40%體積 背景 可讀和不可讀 如何使用 總結

背景 58同城主APP的單架構的bugly符號表已經達到了53MB(解壓後550MB+)。每次打包都需要存儲和每次下載符號表都需要傳輸53MB的數據。去年一直在解析各種日誌,有符號表的,沒有符號表的,能記得住打包地址的,記不住打包地址的。總

原创 一種Swift Hook新思路——從Swift的虛函數表說起

摘要:業界對Swift的Hook大多都需要依靠OC的消息轉發特性來實現,本文從修改Swift的虛函數表的角度,介紹了一種新的Hook思路。並以此爲主線,重點介紹Swift的詳細結構以及應用。 引言 由於歷史包袱的原因,目前主流的大型AP

原创 靜態分析Swift對象 思考

思考 假設有 let obj = UsedClass.init() 如果只知道當前對象的地址,如何知道這個對象屬於哪個類呢?(假設已知爲Swfit) 運行查看可知第一個指針指向0x0000000104102f78,即Swift的me

原创 從Mach-O角度談談Swift和OC的存儲差異

思考--動態調用 在正文開始之前,我們先來看個與主題無關的例子。 class MyClass { var p:Int = 0 init() { print("init") } func he

原创 當了半年多的面試官,談談我的感悟

最近有個特別流行的詞——內卷,其實iOS的內卷不是一天兩天了。作爲第一批90後,有幸親歷了iOS從盛而"衰"的全歷程。還記得14年找工作時可以一週約10個面試,到了16年的時候開始出現了"iOS開發沒人要了"這樣不和諧但是卻很現實的聲音。等

原创 從探索到實踐,58動態庫懶加載實錄 背景 現狀 方案及過程 總結

背景 58APP現階段所有的業務都融合在一個可執行文件中。其弊端在於所有的類都在啓動時同時加載,如某廣告SDK在啓動階段hook大量的系統方法,其中一個load方法的耗時就已經達到了29ms。而激勵視頻業務處於二級頁面,甚至更深的入口,甚至

原创 2019年終總結(一個58程序員這一年都幹了啥)

2019年的年終總結相對於別人來說,來的稍晚些。日曆從2019變成2020已經過去15天了,我纔開始總結這一年的事情。回首過去2019,真的發生了很多變化,不論是工作還是生活,相比於2018都有本質的變化。 一、生活篇 2019年完成了人生

原创 58crash日誌解析方案介紹

開源地址:https://github.com/wuba/WBBlades 背景 在開發過程中,我們經常遇到一類問題,那就是如何將崩潰日誌符號化。當遇到不可穩定復現的崩潰時,解析崩潰日誌是我們查找問題最有效的手段。但是,原始的崩潰日誌是未經