如何调试iOS内核

如题所述

  标 题: 【原创】如何调试iOS内核
  作 者: zhuliang
  时 间: 2012-10-23,11:38:56

  ios内核调试不像win和linux内核调试那么简易,操作起来比较麻烦,本文介绍如何进行ios内核的调试,word版如何调试iOS内核.rar.

  如何调试iOS内核
  作者:zhuliang
  转载请保证文章完整并注明来源
  本文对如何调试iOS(iPhone OS)内核进行简单的介绍,讲述iOS内核调试的环境搭建,调试步骤等。
  iOS是用XNU内核,XNU for mac的代码可以从苹果官方下载到,当然不是最新版的。XNU内核有既相互独立又相互交互的三个组件构成,这三个组件是:Mach、BSD、IOKit。
  首先,是硬件与软件的准备。
  硬件方面,一台越狱的设备是必需的,建议用iPhone4(注iPad2或iPhone4S由于采用的是苹果A5的cpu,它的bootrom目前还没有公开漏洞,不能用红雪设置引导参数,不能使用它来调试)。内核调试数据线,该数据线含有USB转串口的电路,可以参考文献1来自己焊接,本人制作好的调试线如下图,限于篇幅这里不对如何制作调试线展开讨论。一台电脑,可为台式机或笔记本,mac更佳。

  软件方面,虚拟机VMware,mac操作系统比如Lion,XCode等。
  其次,是环境的搭建。
  Mac环境,由于iOS的内核调试要在mac操作系统平台下进行,所以首先要搭建mac环境,最好用真实的mac机,也可用虚拟机,本文为方便没有mac的朋友,以虚拟机为例进行讲述,用真实mac机的朋友可根据具体的情况随机应变。具体步骤如下,先在电脑上装虚拟机(如VMware)软件,然后在虚拟机里面装mac操作系统(比如Lion),装好mac系统后下载XCode并装上。如果觉得这样太麻烦的话,可直接从电驴下载装好Lion的虚拟机。
  有了mac环境后,在mac操作系统里装好USB转串口芯片的驱动程序(可从http://www.ftdichip.com/Drivers/VCP.htm下载),装好驱动后就可用ls /dev/tty.usb*来看一下有没有把串口识别出来。识别出来后如下面的图所示。然后下载本文附带的SerialKDPProxy程序源代码SerialKDPProxy_m.rar(该源码是由Albert_liuwei从参考文献1提供的SerialKDPProxy修改而来,特此声明),并make一下,你懂的。将得到的SerialKDPProxy文件cp到/bin下,这样不用每次都要切换到这个目录下才能执行。

  最后,搭建好了环境后就可以进行调试了,主要有三个步骤:
  一是运行串口代理程序,用下面的命令行。
  SerialKDPProxy /dev/tty.usbserial-A900c0xb
  这里的tty.usbserial-A900c0xb要替换为在你的系统上具体的设备名,上文ls /dev/tty.usb*的结果。
  二是用红雪设置引导参数。该步骤可以在物理主机Windows系统下面进行,因为命令行涉及到一个几百M的文件,复制到虚拟机里比较麻烦。可以在Win下用下面的命令行。
  redsn0w.exe -i "D:\Apple\iPhone3,1_4.3.3_8J2_Restore.ipsw" -j -a "-v debug=0x09"
  该命令输入完毕回车后,红雪会让你按它的提示进入dfu模式。进入dfu后稍等一下,会看到小菠萝人在手机屏幕上。看不到的话,可能是进入dfu模式出错。
  接下来切换到mac环境工作,进入虚拟机环境之前要确认USB转串口的设备前点的钩已钩上。如下图:

  三是用gdb调试ios内核。所用的命令行参数如下:

  gdb -arch armv7 (gdb) target remote-kdp (gdb) attach 127.0.0.1
  在win下面。串口从设备管理器里看出来是COM8.代理程序用这个命令行:./SerialKDPProxy.exe /dev/com8
  启动gdb的命令是 ./arm-apple-darwin-gdb.exe
  其它的都是和se的ppt像一样。
  至于具体怎么调试,熟悉linux下用gdb进行调试的朋友能相当熟练地调试,也可以参考本人的另一文章《iOS如何利用ARM的MMU进行地址映射》。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-02-02
更新方法如下:
从网上下载 固件压缩包
解压
将手机连接到电脑(在手机上选择信任)
在itunes 上选择手机图标可看到手机的摘要信息
按下 ”shift“ +“更新” 选择固件,点确定 ,耐心等待10分钟
至手机重新启动完毕即可
第2个回答  2016-03-04
简单直接地回答,没办法调试。
所谓调试内核,是对System分区的Kernel进行更改和调整,这本来就是Android系统的特权。
iOS是封闭系统,iOS的内核是不对外公开的,所以也没办法调试。