Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: Coding   发起时间: 2009-01-04 17:44 下午   回复: 3

Print Search
帖子排序:    
   2009-01-04, 17:44 下午
Coding 离线,最后访问时间: 2010/2/20 12:12:52 Coding

发帖数前10位
注册: 2008-05-31
发 贴: 103
还是Kernel mode调试设置user mode断点的问题。
Reply Quote

1: kd> bp MF!CMPMFTNodeInfo::ProcessInput
1: kd> bp MF!CASFBytewiseMediaSource::DropSamples
1: kd> bl
 2 e 6af87e8e     0001 (0001) MF!CMPMFTNodeInfo::ProcessInput
 3 e 6b09cc41     0001 (0001) MF!CASFBytewiseMediaSource::DropSamples

首先我下了两个断点,bl看了下似乎都成功了,但是断点3(DropSamples)不会停下来.

不过我也不是很肯定断点3是不是真的被执行到了,但是我认为应该会被执行的。

然后我发现断点2和3有一些区别,这个好像是导致断点3其实并没有被成功设置。发出来求助一下。

断点3这个地址6b09cc41在我bp的时候其实还根本不在内存里面,所以cc也无法被写进去。

实验如下

1: kd> u MF!CASFBytewiseMediaSource::DropSamples
MF!CASFBytewiseMediaSource::DropSamples:
6b09cc41 ??              ???
                                               ^ Memory access error in 'u MF!CASFBytewiseMediaSource::DropSamples'
1: kd> dd MF!CASFBytewiseMediaSource::DropSamples
6b09cc41  ???????? ???????? ???????? ????????
6b09cc51  ???????? ???????? ???????? ????????
6b09cc61  ???????? ???????? ???????? ????????
6b09cc71  ???????? ???????? ???????? ????????
6b09cc81  ???????? ???????? ???????? ????????
6b09cc91  ???????? ???????? ???????? ????????
6b09cca1  ???????? ???????? ???????? ????????
6b09ccb1  ???????? ???????? ???????? ????????

1: kd> !pte 6b09cc41
               VA 6b09cc41
PDE at 00000000C0601AC0    PTE at 00000000C03584E0
contains 000000001121C867  contains 0000000000000000
pfn 1121c ---DA--UWEV   

1: kd> !pte 6af87e8e
               VA 6af87e8e
PDE at 00000000C0601AB8    PTE at 00000000C0357C38
contains 000000002709B867  contains 00000000319DB025
pfn 2709b ---DA--UWEV    pfn 319db ----A--UREV

如果我的分析是对的,那么怎么样才能成功的设置这样的断点呢?

 


IP 地址: 已记录   报告
   2009-01-04, 21:07 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 还是Kernel mode调试设置user mode断点的问题。
Reply Quote
一种方法是在使用.process设置当前进程时指定/p开关。另一种更可靠的方法是想办法设一个内核断点把目标进程断下来,然后再设用户态的断点。举例来说,如果应用程序会调用DeviceIoControl API,那么便可以在内核函数NtDeviceIoControlFile设置一个断点。为了防止其他进程也命中这个断点,可以在设置断点时通过/p开关来制定要调试的进程。
IP 地址: 已记录   报告
   2009-01-04, 21:44 下午
Coding 离线,最后访问时间: 2010/2/20 12:12:52 Coding

发帖数前10位
注册: 2008-05-31
发 贴: 103
Re: 还是Kernel mode调试设置user mode断点的问题。
Reply Quote
目标进程已经被断下来了的,断点2是好的,第二个pte命令显示断点2所在地址的PTE是好的。明天试试看.process /p有用不。
IP 地址: 已记录   报告
   2009-01-05, 17:30 下午
Coding 离线,最后访问时间: 2010/2/20 12:12:52 Coding

发帖数前10位
注册: 2008-05-31
发 贴: 103
Re: 还是Kernel mode调试设置user mode断点的问题。
Reply Quote
process /p没有效果,这个函数本身并不调用到内核态的函数。
最后还是开了个remote user mode debug来解决问题。

IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » Re: 还是Kernel mode调试设置user mode断点的问题。

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.