Re: 看过张老师boot系列文章后的一个困惑——向张老师和所有在读张老师《软件调试》及其文章的朋友求教个windbg技巧的问题
Windows内核调试
看过张老师boot系列文章后的一个困惑——向张老师和所有在读张老师《软件调试》及其文章的朋友求教个windbg技巧的问题
nigel
2009-08-17, 10:02 上午
我在读完张老师的启动系列文章后也自己动手想尝试用windbg抓一些在启动过程中执行的汇编指令,用ctrl+Alt+K设置好断到nt加载的开始部分,然后用t命令去显示以后系统执行的汇编指令,但是每次头只t了200步不到,host端的windbg就busy,不再响应命令了,用ctrl+Break也没有用了,不能端下来,就这样死在了这里,只能强制关机,反复做都是如此,我用uf命令查看了一下死掉位置的函数nt!KeDisableInterrupts,发现就是死在执行pushfd这条指令,而且这个函数也只做了关中断cli的动作,所以我怀疑是不是cli这个指令影响了windbg。不过当执行到nt!KeDisableInterrupts这个函数时改用p命令,就能通过,但是在以后执行的步骤中(1000步或更多),在不定的位置windbg也会显示busy就一直这样不动了。同时我也查阅了张老师所著的《软件调试》的第28和第29章,不过也没能查出原因来。所以在这里发帖,求教张老师和朋友们,是不是微软不允许用windbg把他的内核用t全显示出来?还是说我用的方法不对?如果在开机的过程中想像用t、tc/p、pc这样的命令显示加载了nt后到登录到系统桌面这一过程的详细汇编指令应该注意哪些问题?(注:我用的是串行口方式连接,用到是Null—Modem电缆)。期待张老师和windbg爱好者朋友们帮我解惑!谢谢!
Re: 看过张老师boot系列文章后的一个困惑——向张老师和所有在读张老师《软件调试》及其文章的朋友求教个windbg技巧的问题
格蠹老雷
2009-08-17, 21:49 下午
这个问题的答案在第18章,18.6.1。在内核要中断到调试器时,这一节列出的第一个主要动作有“调用KeDisableInterrupts禁止中断”。
当跟踪KeDisableInterrupts时,内核调试引擎收到调试异常,准备中断到调试器,于是调用KeDisableInterrupts来做准备,而调用这个函数时又触发调试异常,于是死循环了。
26.4节在讨论不可调试代码时提到了这类情况:提供调试功能的系统函数是不可以被调试的。
Re: 看过张老师boot系列文章后的一个困惑——向张老师和所有在读张老师《软件调试》及其文章的朋友求教个windbg技巧的问题
nigel
2009-08-18, 10:39 上午
Thanks Raymond!通过这个问题让我知道,《软件调试》这本书我读的还是不够仔细,好多东西还没有完全吸收呢,虽然这本书很厚,不过还是要再系统的多读两遍,多实践实践,这样收获才丰富!再次感谢张老师!