Xcode動態(tài)調(diào)試的原理
Xcode動態(tài)調(diào)試的原理,涉及到兩個工具,LLDB以及debugserver。
debugserver一開始存放在 Xcode里面,當(dāng) Xcode識別到手機(jī)設(shè)備時, Xcode會自動將 debugserver安裝到 iphone上,然后通過LLDB與debugserver的交互,來實現(xiàn)真機(jī)動態(tài)調(diào)式。
如何做到動態(tài)調(diào)試任意APP
手動給任意APP增加debugserver,使用終端的LLDB與之交互。
實現(xiàn)流程
1.連接越獄的手機(jī)。
2.使用iFunBox在/Developer/usr/bin的目錄下找到debugserver,拖到桌面。
3.打開終端,進(jìn)入桌面路徑,使用以下命令導(dǎo)出權(quán)限。
ldid -e debugserver > debugserver.entitlements
4.使用Xcode打開debugserver.entitlements,增加兩條新的權(quán)限。
get-task-allow
task_for_pid-allow

5.新增權(quán)限后,需要使用以下命令重新簽名,然后將已經(jīng)簽好權(quán)限的 debugserver放到/usr/bin目錄,便于找到 debugserver指令。
ldid -Sdebugserver.entitlements debugserver
6.登錄到手機(jī)root環(huán)境,通過以下指令,讓 debugserverp附加到某個APP進(jìn)程,端口號自定義,進(jìn)程是監(jiān)聽APP的進(jìn)程ID或名稱。
debugserver *:端口號 -a 進(jìn)程
7.新開一個終端窗口,啟動LLDB,遠(yuǎn)程連接 iphone上的 debugserver。
// 輸入lldb,啟動lldb
lldb
// 遠(yuǎn)程連接debugserver
process connect connect://手機(jī)IP地址:端口號
8.連接成功后,監(jiān)聽的APP屬于斷點狀態(tài),使用LLDB的C命令可以讓程序繼續(xù)運(yùn)行。
補(bǔ)充說明
1.默認(rèn)情況下/ Developer/usr/bin/ debugservert缺少ー定的權(quán)限,只能調(diào)試通過 Xcode安裝的APP,無法調(diào)試其他APP,如果希望調(diào)試其他APP,需要對 debugserverg重新簽名。
2.配置過程中,我遇到的問題已寫入<iOS逆向 | 動態(tài)調(diào)試常見問題>一文中,請自行翻閱。