随笔 - 14, 文章 - 2, 评论 - 1, 引用 - 0
数据加载中……

WinDbg调试

一、 如何让WinDbg断在驱动的入口处(无符号表)
1、在系统调用DriverEntry处下断,因为操作系统不同,所以其具体位置也不一样, 
  不过目前windows都在nt!IopLoadDriver函数里.
win7+7eb
win7下win32k!ldevLoadDriver+0x15e
win32k!ldevGetDriverModes

win 7 64  ->nt!IopLoadDriver+0xa04


2、另外一种办法就是,直接修改PE在入口处放置Int 3.修改DriverEntry处为0xCC,就是int 3,修正校验和后加入,执行到DriverEntry时int 3异常自然就会中断在调试器了,这时再把原来的指令改回去继续跑就行了

Windbg对过滤驱动DriverEntry函数下断点技巧
方法1:
1> 先用DeviceTree.exe查看指定的过滤驱动的Load Address(加载地址)
2> 再用LordPE.EXE查看指定过滤驱动文件的入口点地址
3> 计算过滤驱动的DriverEntry函数内存地址  DriverEntry函数内存地址 = Load Address + 入口点地址
例子:
1> Load Address = 0xFAABF000
2> 入口地址 = 0x3400
3> Windbg下断点 bp 0xFAABF000+0x3400


方法2:
1> 先用DeviceTree.exe查看指定的过滤驱动的Service Name
2> 再用LordPE.EXE查看指定过滤驱动文件的入口点地址
3> 计算过滤驱动的DriverEntry函数内存地址 DriverEntry函数内存地址 = Service Name + 入口地址
例子:
1> Service Name是 ntfs
2> 入口地址 = 0x3400
3> Windbg下断点 bp ntfs+0x3400

其他:
例如某个驱动,我只关心它的某个函数,于是我用IDA打开驱动,得到该函数的文件偏移, 一般是后四位即可. 然后加载驱动.
!object \driver\xx.sys 得到其对象地址. 进而得到DriverInit的地址, 去掉后四位,再加上上面文件的偏移,就是在内核中的地址下断之... [s:40]


找不到系统符号表
1.sympath SRV*(PATH)*http://msdl.microsoft.com/download/symbols
2!sym noisy
3.reload


bu $iment(xxxx.sys) ??
symchk -v xxx.exe


查看中断:
!idt
dt _KINTERRUPT

posted on 2010-07-27 16:52 Jeremy1111 阅读(713) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理