首页
社区
课程
招聘
[求助]被断下的指令应该是还没有被执行的吧!
发表于: 2009-2-22 03:30 3947

[求助]被断下的指令应该是还没有被执行的吧!

2009-2-22 03:30
3947
不好意思问下,如果我对指令A按F2键下断点,当程序被断在这条指令上时,指令A本身应该是处于没有被执行的状态吧!也就是说被断下来的这个时候各个寄存器的值是上一条指令执行完后的状态了吧!

不好意思这个基础问题请大家确认一下!

想想应该是这样吧,毕竟被断下的指令被换成CC了。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
2
卷1,Table 6-1. Exceptions and Interrupts
上说的是int 3的类型是陷阱
所以是指令已经执行完了
2009-2-22 03:44
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
3
调试器的软件断点是将原来的指令替换成int3指令,而Int3指令是陷阱指令,产生异常,从而让调试器接管。

int3指令是陷阱,所以调试器获得控制权时,int3指令已经执行完毕,

但是,int3指令的执行效果除了产生一个调试异常,并使处理器进入异常处理流程之外,不对处理器其它状态进行修改。所以,异常处理代码保存的ring3的程序状态与int3前一条指令执行完成后的处理器状态是一致的。所以,逻辑上,断点异常发生时,int3指令执行完毕了,但本来的指令(被int3替换掉了)还没有执行。

在int3指令执行并将控制权转移到调试器后,用户输入命令,要求程序继续执行(比如gdb的continue命令,或OD中是F9),调试器通常的处理方式是,写回被int3替换的指令的第一个字节,并置CPU的T位,然后恢复程序运行,程序会执行一条指令,然后产生单步异常,调试器重新恢复int3断点,并清除T位,然后正式恢复程序的执行。
2009-2-22 11:26
0
雪    币: 201
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
很好,学习中.
2009-2-22 17:02
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
5
学习
123456
2009-2-22 17:28
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
6
这句话不懂



这段....书呆的意思是?
照字面来看好像等同F2那行指令有被执行啰?
2009-2-22 17:37
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
7
这句话有点问题,改了。我要表达的是,断点触发,调试器接管后,用户进行完必要的处理,然后输入continue命令让程序继续运行。



F2时,那一行指令的首字节被替换成了0xCC,调试器将记录下原来的指令。断点触发时,修改过的指令0xCC执行完了,但原来的指令没有执行。
2009-2-22 20:30
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
8
正确
123
2009-2-22 20:51
0
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
原来有了那么久OD,一直理解错了
2009-2-22 21:48
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
是这个意思的,还未执行的
2009-2-22 22:05
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
int 3肯定是被执行了的,原来的指令就未被执行了
2009-2-22 23:33
0
雪    币: 603
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
12
程序为什么会中断?
就是因为遇见了int3
所以,已经执行了
2009-2-23 07:38
0
游客
登录 | 注册 方可回帖
返回
//