时时勤拂拭,勿使惹尘埃

TOC

Categories

macOS(三)远程内核调试


参考资料

调试环境

被调试设备:Mac mini late 2014
系统版本:10.13.6(17G65)
详细版本信息获取方式如下:

Kernel Debug Kit

Apple开发者中心,下载对应版本的内核调试套件Kernel Debug Kit
KDK包打开后是一个pkg安装文件,里面包含了大量的调试符号和一些内核驱动模块,提供了Release、Debug、Development三种版本的内核程序,后两种提供了完整的调试和开发功能,Development内核可以用于日常使用,并且具有最小的性能开销,而DEBUG内核具有更多的错误检查。而安装pkg包其实也只是将其中的文件释放到对应的目录
另外只有被调试的机器需要安装KDK包,调试机中只需要Xcode自带的lldb调试器即可。

替换内核

在macOS中,内核的可执行文件位于/Systems/Library/Kernels下,所以我们只需要在KDK安装目录的可执行文件下找到kernel.development或kernel.debug可执行文件,复制到/Systems/Library/Kernels 即可
需要关闭SIP保护才能进行复制
1、重启 Mac,按住 Command+R 键直到 Apple logo 出现,进入 Recovery Mode
2、顶部导航栏,点击 Utilities > Terminal
3、在 Terminal 中输入 csrutil disable,之后回车
4、重启 Mac
复制后要设置系统调试参数:

sudo nvram boot-args="debug=0x141 kext-dev-mode=1 kcsuffix=development pmuflags=1 -v"
参数说明
1、debug=0x141:启用了远程调试模式
2、kext-dev-mode=1:可以用来加载未签名的kext文件(kext文件:Mac OSX的内核扩展,通常用于设备驱动程序)
3、kcsuffix=development:使用kernel.development文件进行引导内核发展
4、pmuflags=1:禁止看门狗定时器
5、-v :内核调试的时候会有一些有用的信息

重建kextcache以使用新的kernel,重启后生效
 sudo kextcache -invalidate /Volumes/<Target Volume>
     sudo reboot
重启后进入等待调试模式:
远程调试attch
主机上启动lldb
kdp-remote 192.168.174.129
连接成功后,被调试机上会显示Connected to remote server
取消调试模式
被调试机重启,按住 Command+R 键直到 Apple logo 出现,进入 Recovery Mode
nvram -d boot-args
kextcache -invalidate /
reboot

0 评论:

发表评论