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   发起时间: 2011-08-16 15:13 下午   回复: 1

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

发帖数前10位
注册: 2011-01-07
发 贴: 66
关于KiTrap03中的eip - 1
Reply Quote

本来以为理解了这个问题,想多后却胡涂了。我的系统是Win7 SP1

KiTrap03中的dec ebx,并没有直接修改TrapFrame,修改的是传递给CommonDispatchException的参数,这样,在KiDispatchException中看到的2个参数(ExceptionRecord和TrapFrame对于int 3来说,EIP的值是不一样的,差了一个1),

而到了KiDispatchException中,有了dec     [edi+_CONTEXT._Eip]语句,修改的是Context,对trapframe也没有影响,

在发送给调试器的时候,只传递了ExceptionRecord,没有TrapFrame或是Context,如果调试器有回复,就直接退出了,并没有调用KeContextToFrame(看了代码,好象用户态下的都没有调用,kernel下的调用了),那么使用iret中断返回后是怎么到正确的指令地址上的?难道是用户态的调试器做的手脚?


IP 地址: 已记录   报告
   2011-08-19, 16:21 下午
zyq8709 离线,最后访问时间: 2019/8/6 21:05:02 zyq8709

发帖数前10位
注册: 2011-04-19
发 贴: 74
Re: 关于KiTrap03中的eip - 1
Reply Quote
不好意思,之前没弄明白就发帖,见笑了。
我又查了查书,看了一下ReactOS,确实是用户调试器时内核不管eip的修正。我在罗云彬的windows环境下32位汇编语言程序设计的13.3.3节的第3部分发现了答案,他的程序在模拟调试器时首先用GetThreadContext获得了TrapFrame的内容,然后并将其中的eip减一,用SetThreadContext写回了TrapFrame,在用户状态进行了修正,楼主的想法应该是正确的。
但是我在张老师的软件调试书中图 11-3中发现用户模式的调试也被最终用KeContextException将eip修正了,这可能是XP系统之后的新变化吧。
IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » Re: 关于KiTrap03中的eip - 1

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