我有I / O Kit驱动程序:虚拟以太网设备。经过一段时间的操作系统挂起,看起来我的驱动程序有一些僵局。
我已经完成了下一步:
- 通过FireWire连接两个macbook
- 设置调试环境
- 初始化NMI(通过电源按钮)
- 通过gdb连接到目标
- 抓住我的kext的地址
- 创建和加载符号(这是我读过的所有文档中的最后一点)
到目前为止一切顺利。如果内核恐慌就足够了。 但是在我的情况下没有内核恐慌,我驻留在处理NMI的线程中。
现在问题是:如何切换到我的kext的线程?
命令showalltasks
为我提供了所有任务的列表,我的kext可能运行的唯一任务是kernel_task,所以我试图通过showtaskthreads
和showtaskstacks
检查此任务但不能找到与我的代码类似的东西。我错过了什么吗?
对于任何有关文档的建议或链接,我将不胜感激。
答案 0 :(得分:0)
我没有直接回答你的问题 - 但是有可能用断点点击你的kext代码吗?内核调试的常用方法是nmi机器,附加调试器,在感兴趣的代码中放置一个断点,恢复执行(continue
)然后执行任何操作以达到断点。
答案 1 :(得分:0)
好吧,我正在回答我自己的问题
要使用我的kext代码查看线程,我需要使用我的kext切换到进程。在我的情况下,它可能是一个浏览器(因为我的kext是NKE)。
但事实上它并没有帮助我很多。但旧的打印方法帮助我找到了僵局。所以接下来是我的建议:对于内核恐慌 - 使用调试器,对于死锁 - 使用打印,找到锁定位置并分析代码。