iOS 7越狱调试

iOS 7中苹果彻底放弃了对gdb的维护,所以必须用C/S模式来调试程序。

配置调试环境

采用的调试环境为gdb-server(iOS 7)+ lldb(OS X)。

在iOS SDK中带有debugserver,我们要做的就是把debugserver打补丁,然后复制到iOS下运行。 完整的教程参考这个链接

  1. 复制debugserver,使用lipo取出合适的部分,例如运行在armv7设备上:

     lipo -thin armv7 debugserver -output dbgserverv7
    
  2. 把以下文件保存为ent.xml,下一步ldid会用到它为文件添加权限位:

     <!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>get-task-allow</key>
         <true/>
         <key>task_for_pid-allow</key>
         <true/>
         <key>run-unsigned-code</key>
         <true/>
     </dict>
     </plist>
    
  3. 用ldid进行伪签名,ldid可以用brew安装:

     ldid -Sent.xml dbgserverv7
    
  4. 把dbgserverv7用任何办法复制到iOS设备上,准备部分就完成了。

启动调试

基本思路是在iOS下运行dbgserver,然后在OS X下运行lldb,连接至iOS。

  1. 在iOS下执行服务器端,在这里监听了端口:

     dbgserverv7 0.0.0.0:8888
    
  2. 把调试的文件从iOS复制到OS X下,以便lldb载入。当然,如果调试的自己的程序,有了符号表 就可以省略这个步骤了,lldb会自动找到源码。

  3. 在OS X下运行lldb,其实gdb也是可以的。然后在lldb中使用gdb-server命令连接调试服务器:

     lldb
     (lldb) gdb-server 192.168.1.11:8888
    

如果没有错误信息,连接就成功建立了。

LLDB技巧

初学lldb,可以参考这个文档,记载了gdb命令与lldb命令的对应:

  • 等待进程启动

      (lldb) process attach --name XXXX --waitfor
    
  • 查询符号表

      (lldb) image lookup -s NAME_TO_FIND
    
  • 反汇编函数

      (lldb) disassemble -n FUNCTION_NAME
    

可能还会陆续更新(?)

ios

Comments