debugserver + lldb环境搭建

作者: 呆呆滴木木菇凉 | 来源:发表于2018-05-25 18:12 被阅读10次
    1、重签debugserver

    找到你Xcode的位置,右键打开包内容,然后按路径 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport找到和你手机系统版本对应的DeveloperDiskImage.dmg

    打开DeveloperDiskImage.dmg,找到/usr/bin/debugserver

    拷贝一份debugserver到桌面

    wifi:~ clf$ cp /Volumes/DeveloperDiskImage/usr/bin/debugserver ~/Desktop/debugserver
    

    接下来,想让debugserver成功跑起来要做两件事

    1)给debugserver瘦身

    瘦身要把debugserver瘦成和我们设备相同arm指令集的对应类型,可参照下图


    然后执行命令

     wifi:~ clf$ lipo -thin arm64 ~/Desktop/debugserver -output ~/Desktop/debugserver
    

    备注:如果ldid支持fat binary的话,就不用瘦身,我还没有去验证ldid支不支持,所以还是瘦身下比较靠谱。

    2)给debugserver添加task_for_pid权限

    只有打了task_for_pid权限我们才可以在后来以进程为单位调试我们要调试的App。

    查看原始的debugserver的签名属性:

    ldid -e ~/Desktop/debugserver
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.backboardd.debugapplications</key>
        <true/>
        <key>com.apple.backboardd.launchapplications</key>
        <true/>
        <key>com.apple.diagnosticd.diagnostic</key>
        <true/>
        <key>com.apple.frontboard.debugapplications</key>
        <true/>
        <key>com.apple.frontboard.launchapplications</key>
        <true/>
        <key>com.apple.security.network.client</key>
        <true/>
        <key>com.apple.security.network.server</key>
        <true/>
        <key>com.apple.springboard.debugapplications</key>
        <true/>
        <key>run-unsigned-code</key>
        <true/>
        <key>seatbelt-profiles</key>
        <array>
            <string>debugserver</string>
        </array>
    </dict>
    </plist>
    

    如果你输出结果有乱码什么的显示,就说明你的ldid有问题。

    下面我们给debugserver重签名

    新建一个entitlement.plist文件,内容如下:

     <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ PropertyList-1.0.dtd">
    <plist version="1.0">
        <dict>
            <key>com.apple.springboard.debugapplications</key>
            <true/>
            <key>run-unsigned-code</key>
            <true/>
            <key>get-task-allow</key>
            <true/>
            <key>task_for_pid-allow</key>
            <true/>
        </dict>
    </plist>
    

    重签名,执行命令:

    wifi:Desktop clf$ codesign -s - --entitlements entitlements.plist -f debugserver
    debugserver: replacing existing signature
    

    再查看下debugserver的签名:

    wifi:Desktop clf$ ldid -e ~/Desktop/debugserver
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.springboard.debugapplications</key>
        <true/>
        <key>run-unsigned-code</key>
        <true/>
        <key>get-task-allow</key>
        <true/>
        <key>task_for_pid-allow</key>
        <true/>
    </dict>
    </plist>
    

    把旧的属性列表替换掉了,说明OK了。

    2、把重签名的debugserver拷贝到手机上
    wifi:Desktop clf$ scp -p 22 debugserver root@192.168.2.2:/usr/bin/
    root@192.168.2.2's password: 
    22: No such file or directory
    debugserver                                 100% 4599KB   2.1MB/s   00:02  
    

    接下来就可以再手机上使用debugserver了。
    当然你要赋予debugserver执行权限

    iPhone:~ root# chmod +x /usr/bin/debugserver
    

    备注:

    如果你手机连接过xcode做过任何调试,在你手机的 /Developer/usr/bin/ 目录下会有个debugserver,你也可以把这个传到电脑上,重签名后再传回到手机上,这样的好处是不用瘦身,这个debugserver对应的指令集就是手机的指令集

    3、远程调试

    在手机上开启debugserver

    debugserver *:1212 -a <process name>

     iPhone:~ root# debugserver *:1212 -a Community10000v6
    

    失败了

     debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-360.0.26.1
    for arm64.
    Attaching to process Community10000v6...
    error: failed to attach to process named: "" 
    Exiting.
    

    然后我尝试开启一个手机上有的程序

    iPhone:~ root# debugserver *:1212 -a QQ  
    debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-360.0.26.1
     for arm64.
    Attaching to process QQ...
    Listening to port 1212 for a connection from *...
    

    这个就是成功了的。

    如果debugserver开启成功,就可以在电脑终端使用lldb命令
    命令lldb,然后process connect connect://yourPhoneIp:1212

     wifi:Desktop clf$ lldb
     (lldb)  process connect connect://192.168.2.2:1212
    

    这时候连接手机的一端就会增加一句输出

    debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-360.0.26.1
     for arm64.
    Attaching to process QQ...
    Listening to port 1212 for a connection from *...
    Waiting for debugger instructions for process 0.
    

    稍等一下,之后就会连接成功,然后就可以利用lldb的命令行,来调试连接的App了

    相关文章

      网友评论

        本文标题:debugserver + lldb环境搭建

        本文链接:https://www.haomeiwen.com/subject/ypmujftx.html