91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS中怎么實現動態調試

發布時間:2021-06-16 13:59:51 來源:億速云 閱讀:170 作者:Leah 欄目:移動開發

本篇文章給大家分享的是有關iOS中怎么實現動態調試,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

Xcode的動態調試原理

首先了解一下 Xcode 編譯和調試器的發展。Xcode 中的編譯器發展歷程:GCC -> LLVM,調試器的發展歷程:GDB -> LLDB 。

Xcode 調試安裝到手機上的應用的原理:Xcode 通過 LLDB 調試器把調試指令發送到手機上的 debugserver, debugserver 再與相應的 APP 進行交互,達到調試的效果。

debugserver 一開始是存放在Mac的Xcode里面,路徑:

/Applications/Xcode.app/Contents/Developer/Platforms
/iPhoneOS.platform/DeviceSupport
/9.1/DeveloperDiskImage.dmg
/usr/bin/debugserver

當 Xcode 識別到手機設備時,Xcode 會自動將 debugserver 安裝到手機上。

Xcode 調試的局限性:一般情況下,只能調試通過 Xcode 安裝的APP,無法調試其它APP。

給debugserver賦予權限

默認情況下 /Developer/usr/bin/debugserver 缺少一定的權限,只能調試通過Xcode安裝的App,如果希望調試其它App,需要對 debugserver 重新簽名,簽上可以調試其它App的權限。

需要的兩個權限為:get-task-allow 和 task_for_pid-allow

iPhone上的 /Developer 目錄是只讀的,無法直接對 /Developer/usr/bin/debugserver 文件簽名,需要先把 debugserver 復制到Mac。

通過 ldid 命令導出文件以前的簽名權限:

$ ldid -e debugserver > debugserver.entitlements

debugserver.entitlements 這個文件其實是個 plist 文件,在這個文件中加上上面提到的兩個權限后,再通過 ldid 命令對文件重新簽名。

$ ldid -Sdebugserver.entitlements debugserver

然后將已經簽好權限的 debugserver 放到 /usr/bin 目錄,便于找到 debugserver 指令。

debugserver附加到某個APP進程

$ debugserver *:端口號 -a 進程
  • *:端口號:使用iPhone的某個端口啟動debugserver服務(不是保留端口)

  • -a進程:輸入APP的進程信息(進程ID或者進程名稱)

Mac遠程連接iPhone上的debugserver服務

啟動LLDB:

// 在終端輸入
$ lldb

連接debugserver服務

(lldb) process connect connect://手機IP地址:debugserver服務端口號

使用LLDB的c命令讓程序先繼續運行

(lldb) c

到此,就可以遠程調試別人的App了。

常用的LLDB指令

給ViewController的test方法設置斷點

breakpoint set -n "-[ViewController test]"

查看指令用戶使用 help 指令: help breakpoint 等。

打印線程的堆棧信息: thread backtrace

很多命令不在這里贅述,請參考:http://lldb.llvm.org/lldb-gdb.html

ASLR

獲取 ASLR 的偏移量:

image list -o -f

打印結果的第二列前面的地址就是我們需要的 ASLR 的偏移量offset。

假如我們想給某個類中的test方法添加斷點,那么通過 Hooper 工具找到該方法的第一個內存地址,假如為0x010101,然后地址加上我們得到的 ASLR 的偏移量就是該方法的實際地址。然后通過該地址給方法下斷點。

breakpoint set -o 0x010101+offset

以上就是iOS中怎么實現動態調試,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

封丘县| 黄龙县| 西乌| 平潭县| 罗甸县| 通榆县| 交城县| 涟水县| 定兴县| 公主岭市| 花莲市| 合阳县| 贡觉县| 纳雍县| 灌南县| 彩票| 黔江区| 全椒县| 福海县| 湘阴县| 含山县| 临泽县| 铁岭市| 祁阳县| 辽阳市| 韶关市| 温宿县| 北票市| 黑龙江省| 汝南县| 长沙市| 团风县| 马尔康县| 日土县| 连山| 霍城县| 安塞县| 玉林市| 仁化县| 青浦区| 股票|