今天在测试的时候发现IDA 5.5可以启动windbg调试器,而IDA 6.0却无法启动windbg调试器。大体看了一下可能是由于搜索路径造成的,重新将windbg安装到program files下之后问题就结局了。
网上也有关于用IDA调试驱动的文章,这里只是再整理一下,用IDA载入驱动分析完成之后选择调试器为Windbg debugger,如图1所示:
图1
然后执行菜单中的Debugger->Debugger options打开如图2所示的设置窗口。
图2
点击Set specific options打开特殊选项窗口,如图3所示:
图3
将最上方的默认user mode修改为Kernel mode debugging 或者kernel mode debugging with reconnect and initial break,至于两个选项的区别读者可以自行测试一下,这里就不说废话了,按照字面意思理解即可。设置完成后关闭设置窗口,然后执行菜单中的Debugger->Process options打开进程选项设置窗口,在Connet string中输入要连接的字符串,也就是com接口的名称,这里是com:port=\\.\pipe\com_1,baud=115200,pipe,如图4所示。
图4
设置完成后关闭设置窗口,执行菜单中的Debugger->Attach Process,打开进程附加窗口,如图05所示。
图5
附加之后等待符号库加载完就可以进行调试了。调试器挂在之后如果没有意外会中断在第一个int3断点,如图6所示。
图6
现在就可以对驱动进行设置断点和调试了,效果如图7所示:
图7
在调试之前为了使程序的断点能够中断需要修正Process options选项中的部分参数,如图8所示。
图8
需要将Application修改为程序在远程目标机器上的路径,另外Directory同样需要修改为远程系统的目录。否则在调试的过程中如果设置断点将会询问本地文件与远程文件是否一样,并且设置的断点将无法触发。
如果使用IDA 5.5 设置方法是类似的,与上一篇文章《IDA调试内核》http://www.h4ck.org.cn/2011/05/kernel-debugging-with-ida-pro/ 不同的是本文的调试没有使用第三方的工具,并且实现方法也比较简单。如果调试没有源码的驱动用IDA应该会更直观一些吧,如果有源码的话还是使用Windbg更好一些。
注意:
需要注意的是前提已经配置好了Windbg的远程调试,否则使用IDA是无法连接虚拟机进行调试的,设置方法可以参考下面的连接:
Windows 7:http://www.h4ck.org.cn/2010/11/win7-remote-debug-via-windbg/
Windows XP:http://www.h4ck.org.cn/2009/09/driverdevelop1/
8 comments
nice tut..btw do you have a cracked version of ida pro 6..?
Not a cracked version , I just buy one license.lol
博主高手啊,谢谢分享^
菜鸟而已 ,什么高手啊。lol
请问是先加载好驱动吗?
这个东西和gdb本身的差距并不大,ida不过是个显示模块而已。传统的gdb的调试方式可以不用进行变化,如果驱动加载完了就只能attach了。
*dash* 可是这个是windows下的,为什么能用gdb。。。
gdb是跨平台的一个调试器,为什么不能用?