漫談LLDB:從入門到精通
先聲明兩點:
1. 本系列談的LLDB側重於iOS系統,且基於Xcode。
2. 由於是開發HMLLDB總結的經驗,因此內容會側重於自定義Python腳本。html
前言
我前不久開源了一個LLDB命令庫HMLLDB,其中涉及到不少知識並不能用一篇文章簡單講完,因此準備寫一系列相關的文章。這是第1篇,給出學習路線和資料。python
入門
- 首先天然是掌握LLDB自帶的命令,經過命中斷點或點擊
Pause program execution
進入LLDB調試模式後,輸入help
就能看到全部的命令。網上有大量的介紹文章,大同小異,請讀者自行搜索,多看幾篇,同時也試一試這些命令。其中要重點了解expression
、breakpoint
和target
命令。
- 在WWDC的調試(Debugging)主題把全部相關的視頻都看完。其中有個必看的視頻Advanced Debugging with Xcode and LLDB。
- 這本書Advanced Apple Debugging and Reverse Engineering很是值得一看,優先看介紹LLDB系統命令和自定義LLDB命令的這兩個章節。
進階
- 瞭解如何用Python自定義命令腳本。一樣的,先看網上的一些教程(上面那本書也有一章節也專門講自定義命令),動手集成一個小腳本體驗。而後再看官網的這節介紹Create a new lldb command using a Python function。
- 到這裏應該已經瞭解如何自定義命令腳本,可是寫LLDB腳本會遇到很是多的坑和不熟悉的SB API,因此參考項目越多就越好,看看別人怎麼處理、怎麼調用。這裏首先推薦兩個項目,一個是我寫的HMLLDB,另外一個是Derek Selander(上面那本書的做者)的LLDB項目,這兩個項目架構簡單(幾乎不存在架構),大多數命令執行一整段代碼也對初學者較友好。其次推薦Facebook的chisel項目,命令簡單實用。最後推薦的就是LLDB項目自己提供的examples。
- 瞭解SB API。挖掘LLDB豐富的功能繞不開SB API,而官網對API註釋不多,因此參考上面的項目中用到的API很重要。不過你還能夠嘗試HMLLDB項目中的plldbClassInfo命令,這個命令是我用來幫助理解部分SB API的。固然也能夠看源碼,也許能猜出一些API的用法。
- 若是你掌握了大部分經常使用SB API,也能比較愉快地寫命令腳本了,接下來就能夠看看源碼深刻了解。但在此以前,我還建議看看Jim Ingham在stackoverflow回答。我把他在2017年至今全部Answers看了一遍,受益不淺。
精通
任何技術要達到精通,都要全面深刻去學習,甚至還須要多方面的知識儲備。全面掌握LLDB系統命令的每一個子命令和選項、全面熟悉SB API,熟悉不一樣平臺下LLDB的使用等等。其餘相關(例如LLVM)的知識也要有所瞭解。這部分以個人水平難以給出有效的學習路徑,但有一個最直接的途徑那就是看懂項目的源碼。git
資料彙總