日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS Hacker LLDB 和 debugserver 实例调试

發布時間:2024/4/18 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS Hacker LLDB 和 debugserver 实例调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LLDB 和 debugserver 實例調試

GDB 也可以調試 iOS 程序,但是效果不如蘋果的 LLDB, LLDB 可以在程序運行的時候輸入命令下斷點,而 GDB 卻不行。

一、LLDB 和 debugserver 的配置

  • 插上手機,運行 Xcode,會將 debugserver 自動復制到手機上

  • 到手機上下載 /Developer/usr/bin/debugserver 到 osx 上

  • lipo -thin arm64 ~/debugserver -output ~/debugserver //給debugserver 減肥

  • /opt/theos/bin/ldid -Sent.xml debugserver //給 debugserver 添加 task_for_pid 權限

  • codesign -s - –entitlements ent.plist -f debugserver //如果上一條指令出錯就試試這個

  • 將處理完后的 debugserver 上傳到手機 /usr/bin/debugserver 上

  • chmod +x /usr/bin/debugserver //給 debugserver 設置權限

  • 二、LLDB 和 debugserver 的連接方法

  • debugserver *:1234 -a “MobileSMS” //附加進程MobileSMS進程, 開啟1234端口,等待所有lldb來連接

  • debugserver 192.168.4.75:1234 -a “MobileSMS” //附加進程,開啟 1234端口, 等待 192.168.4.75 來連接

  • debugserver -x backboard *:1234 /Applications/Calculator.app/Calculator //執行進程

  • 三、實際調試

    下面是一個調試實例

    ios 上運行

    debugserver *:1234 -a “SpringBoard”

    osx 上運行 lldb

    (lldb) process connectconnect://192.168.4.132:1234

    Process 837 stopped

    * thread #1: tid = 0x771a, 0x0000000199038e7clibsystem_kernel.dylib`mach_msg_trap + 8, queue = ‘com.apple.main-thread’, stopreason = signal SIGSTOP

    frame #0: 0x0000000199038e7c libsystem_kernel.dylib`mach_msg_trap + 8

    libsystem_kernel.dylib`mach_msg_trap:

    -> 0x199038e7c <+8>: ret

    libsystem_kernel.dylib`mach_msg_overwrite_trap:

    0x199038e80 <+0>: movn x16, #0x1f

    0x199038e84 <+4>: svc #0x80

    0x199038e88 <+8>: ret

    (lldb) c

    Process 837 resuming

    連接成功之后會斷下來,輸入 c 跑起來,相當于 windbg 里的 g

    image list -o -f //顯示加載的模塊

    [ 0]0x00000000000ec000/System/Library/CoreServices/SpringBoard.app/SpringBoard(0x00000001000ec000)

    [ 1]0x000000010075c000/Library/MobileSubstrate/MobileSubstrate.dylib(0x000000010075c000)

    [ 2]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/StoreServices.framework/StoreServices

    [ 3]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/AirTraffic.framework/AirTraffic

    [ 4]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/IOSurface.framework/IOSurface

    [ 5]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/MultitouchSupport.framework/MultitouchSupport

    [ 6]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/MobileWiFi.framework/MobileWiFi

    [ 7]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/usr/lib/libIOAccessoryManager.dylib

    [ 8]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/IOMobileFramebuffer

    [ 9]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/BluetoothManager.framework/BluetoothManager

    ………………………………………………………

    其他 lldb 相關的命令

    ni //單步
    si //步入

    po x0po[x0 class] //打印數據的 class
    p (char*)$x1

    b NSLog //給函數下斷點
    b [Network sendData:withFile:] //給類函數下斷點
    br -s -a address //給地址下斷點
    br -s -n main //給函數下斷點
    br l //查看斷點
    br del //刪除所有斷點
    br del 1 //刪除1號斷點

    register write 寄存器 值 //與寄存器
    register read //查看所有寄存器的信息
    register read $x0 //查看寄存器的值

    dis //查看匯編代碼
    dis -a address //查看某個地址的匯編代碼

    x $x0 //查看內存
    memory read address //讀內存
    memory write address xxx //寫內存

    br comand add 1 //斷點添加
    po $x0
    c
    DONE

    //添加表達式,將 str 變量置空
    expression
    str = nil

    四、通過 usb 連接 ssh 進行調試

    由于某些情況下沒有 wifi ,或者是網絡環境比較差,網速很慢。這時候可以選擇使用 usb 數據線連接 ssh 進行調試。使用 usb 的方式,連接速度很快。方法如下:
    1. 把數據線接上,下載 usbmuxd 工具,下載地址。
    2. 下載完成解壓,切換到 python-client 目錄,運行命令 python tcprelay.py -t 22:2222,相當于把 iOS 的 22 端口轉發到電腦本機的 2222 端口。
    3. ssh root@localhost -p 2222 //連接本機 2222 端口,相當于連接 iOS 的 ssh
    4. debugserver *:1234 -a “SpringBoard” // 在 iOS 上開啟 debugserver
    5. python tcprelay.py -t 1234:12345 // 在 OSX 上運行,將 iOS 的 1234 端口轉發到電腦本機的 12345 端口
    6. lldb //運行 lldb
    7. process connectconnect://localhost:12345 //連接本機的 12345 端口,開始你的調試吧

    總結

    以上是生活随笔為你收集整理的iOS Hacker LLDB 和 debugserver 实例调试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。