首页
社区
课程
招聘
[求助]INT3之后到底执行哪条指令?
发表于: 2007-9-21 01:50 4787

[求助]INT3之后到底执行哪条指令?

2007-9-21 01:50
4787
资料上说调试器在下断点时的步骤是:
1。把要下断点的字节换成一个INT3,然后在调试器里接收这个breakpoint事件
2。之后把原来的那个字节再写回去,同时把CPU改成单步执行模式
3。由于INT3产生的是trap,因此CPU还会继续在这个地址执行原代码,这样执行一条指令之后,又产生了单步事件
4。调试器再把那个地址写成INT3,这样下次到那儿的时候还是有这个断点。同时取消CPU的单步执行模式

这里面有个问题,就是红色的那句。如果调试器不修改代码的话,INT3之后执行的还会是INT3(也就是一直INT3下去)么?

我自己用windows调试机制做实验,int3之后执行的明明是下一句啊!但如果INT3之后执行下一句,那么断点又是如何实现的呢?

谢谢

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 50161
活跃值: (20615)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
INT3之后异常,会交个操作系统来处理,如果你的程序没对异常进行处理,程序就会崩溃退出。
2007-9-21 17:40
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NaX
3
INT3之后 EIP确实已经指向下一指令(如果是我们自己设置的INT3 那么EIP的值就是INT3地方+1 显然这应该是一条被打断了的指令,99%是无效的)要继续执行 先恢复INT3 再修改EIP到原来INT3这个地方继续执行
2007-9-21 20:42
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
嗯,NaX说的对,确实需要改EIP
不过我用HLT这个特权指令代替了,它产生的中断可以跳回原地址,而不会跳到下一地址。这样省去修改EIP的过程
不晓得为啥广大调试器都要用INT3呢
2007-9-21 21:43
0
雪    币: 148
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢我也来看看
2007-9-21 22:10
0
游客
登录 | 注册 方可回帖
返回
//