阅读目录
ida-调试中断
发布于:2017-3-23 16:37 | 153690次阅读 作者: 管理员 | 原作者: TP | 来自: 原创
前言: Windows内核调试很多时侯都是使用Windbg + VMWare的搭配进行调试, 但这个搭配还是依赖于Windows自身的调试体系进行的, 假如我们有一个需求是要调试调试体系自身的话( 比如调试INT 3中断处理函数), 这个搭配就会因为变得不好使, 原因是因为异常分发始终没有得到正常的处理。
亦因为调试体系不能调试自身, VMWare的开发人员也是不能接受的, 因此他们也汇出了一套调试接口使用流程如下, 原理是VMWare在仿真指令时可以透传一份上下文给GDB:
我们可以透我们可以透过增加以下两句语句 让vmware的调试体系生效
这个接口是透过网络连接的原理实现的, 也就是设置后, VMWare会设置一个埠, 等待连接,
这时侯我们可以使用透过IDA 的GDB Debugger进行远程调试:
连接本地埠 localhost: 8864, 32位统则是8832
选择进程ID为0
成功的话可以看到以下的框了
虽然系统已经停下来,可是什么代码都看不到的, 这时侯我们需要手动创建内存区域:
右键->点Insert
按如下设置 即可以浏览0~FFFFFFFFFFFFFFF0的代码
创建后可按运行, 系统就会继续跑起来
这时侯应该会弹出以下的框, 再单击Suspend 即可断到Guest
OS当前正在执行的指令(假如因为某原因系统死循环卡死了,
RIP就会停在循环中的某一句)
实例: 比如我们需要调试INT 3中断处理函数, 1. 我们可以先使用Windbg进行普通双机调试取得中断函数地址, 比如为int 3中断, 2. 我们要是直接使用Windbg在INT 3处理函数中下断, 必然会因为异常分发永远得不到正常处理而卡死, 3. 因此我们可以在IDA中往这个地址下断, 让VMWare的自己的调试流程来进行调试, 而不是走Windows的内核调试机制
使用!idt 命令查看IDT表
按Suspend停止系统后, 在IDA单击’g’ 输入其地址, 但IDA不会自动把内存区的2进制变成汇编我们可单击’c’ 进行反汇编
这时侯代码就出来了, 我们可以直接在这中断函数下F2断点, 然后跑起系统...
在系统任意时刻触发INT 3中断, 比如使用WINDBG主动断下
IDA就会断下了, 我们就可以看到当时侯的栈, 甚至单步都是可以的
这类调试技巧可以应用的场合众多: 比如调试各种系统假死, 调试中断处理函数, VT驱动调试等 |
最新评论
发表评论