首页
社区
课程
招聘
[求助]ETHREAD中寄存器值与断点命中后寄存器值不一样
发表于: 2016-6-24 15:35 5324

[求助]ETHREAD中寄存器值与断点命中后寄存器值不一样

2016-6-24 15:35
5324
如图,运行了两个Windbg,一个Windbg用于调试测试程序,简称程序调试器。另一个用来本地内核调试,简称内核调试器。
当测试程序触发int 3断点后,程序调试器显示出的寄存器值,然后用内核调试器,找到该进程的ETHREAD进而找到_KTRAP_FRAME,最后找到寄存器的值。
因为被调试程序未被恢复运行,所以程序调试器EIP和内核调试器的RIP相同(红框标注部分)。那么问题来了,为什么其他的寄存器的值都不相同,简直想不明白,求大神告知

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
2
你没注意到,还有一些是相同的,例如 rsp=esp=27ee1c, ebp=rbp=27ee30,另外,
保存在 _KTRAP_FRAME 结构中的寄存器值中,有一部分是为了在恢复用户线程的执行环境时使用,
这就是指令指针 rip=eip 的缘故.而另外一些是 Ring0 才可见的寄存器(因为 _KTRAP_FRAME 是一个内核数据结构 ),所以你基本上不能拿其中的字段来与 Ring3 可见的寄存器值一一对应.
2016-6-25 01:34
0
雪    币: 324
活跃值: (60)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
多谢大神告知
2016-6-25 08:58
0
游客
登录 | 注册 方可回帖
返回