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内核调试

帖子发起人: wrong   发起时间: 2012-03-19 16:08 下午   回复: 1

Print Search
帖子排序:    
   2012-03-19, 16:08 下午
rong_bo 离线,最后访问时间: 2011/9/5 12:57:46 wrong

发帖数前10位
注册: 2011-01-07
发 贴: 66
关于KiTrap03的思考。
Reply Quote

最近重读了软件调试的18章,想的问题多了点,请教张老师。

想像一条普通的int 3, 虽然是陷阱类异常,但因为KiTrap03会将Eip-1,使得异常处理程序或者调试器中看到的eip指向int 3指令,

如果这个int 3是在调试器中设置的断点,调试器会将指令处的指令替换成int 3,调试器收到异常并且恢复执行后,会将这个int 3恢复成原来的指令并且从这个指令处开始执行。

如果这个int 3本身是程序里面的,调试器捕捉到这个异常后,恢复执行就会直接跳过这条指令?不知道这样的理解对不对?

也就是说KiTrap03的异常分发逻辑里会区分这个int 3是调试器设置的断点,还是程序代码本身就有的指令? 

另外一个是关于书中第18章节,KiTrap2D的思考,我对它的工作流程还是挺好奇的,想像一下,是不是下面这样?

KiTrap2D-->初始化工作-->KiTrap03-->KiDispatchException-->

if(kernel debugger) --> KdpTrap

   if( int 2d )

      debugging service; return TRUE;

   if( int 3 )

      break into debugger;

else --> KdpStub

   if( int 2d )

      do nothing and return true

   if( int 3)

      return false;

....

感觉很复杂,难理解。


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

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 关于KiTrap03的思考。
Reply Quote

对于前两个问号,是这样的,调试器收到断点异常后,会查询自己的断点列表,如果不在其中,会使用不同的逻辑。恢复目标执行时不需要单步走出断点,只需要通过线程上下文递增EIP。

 


IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » Re: 关于KiTrap03的思考。

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