能力值:
( LV2,RANK:10 )
|
-
-
2 楼
卷1,Table 6-1. Exceptions and Interrupts
上说的是int 3的类型是陷阱
所以是指令已经执行完了
|
能力值:
(RANK:260 )
|
-
-
3 楼
调试器的软件断点是将原来的指令替换成int3指令,而Int3指令是陷阱指令,产生异常,从而让调试器接管。
int3指令是陷阱,所以调试器获得控制权时,int3指令已经执行完毕,
但是,int3指令的执行效果除了产生一个调试异常,并使处理器进入异常处理流程之外,不对处理器其它状态进行修改。所以,异常处理代码保存的ring3的程序状态与int3前一条指令执行完成后的处理器状态是一致的。所以,逻辑上,断点异常发生时,int3指令执行完毕了,但本来的指令(被int3替换掉了)还没有执行。
在int3指令执行并将控制权转移到调试器后,用户输入命令,要求程序继续执行(比如gdb的continue命令,或OD中是F9),调试器通常的处理方式是,写回被int3替换的指令的第一个字节,并置CPU的T位,然后恢复程序运行,程序会执行一条指令,然后产生单步异常,调试器重新恢复int3断点,并清除T位,然后正式恢复程序的执行。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
很好,学习中.
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
学习
123456
|
能力值:
( LV9,RANK:180 )
|
-
-
6 楼
这句话不懂
这段....书呆的意思是?
照字面来看好像等同F2那行指令有被执行啰?
|
能力值:
(RANK:260 )
|
-
-
7 楼
这句话有点问题,改了。我要表达的是,断点触发,调试器接管后,用户进行完必要的处理,然后输入continue命令让程序继续运行。
F2时,那一行指令的首字节被替换成了0xCC,调试器将记录下原来的指令。断点触发时,修改过的指令0xCC执行完了,但原来的指令没有执行。
|
能力值:
( LV9,RANK:180 )
|
-
-
8 楼
正确
123
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
原来有了那么久OD,一直理解错了
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
是这个意思的,还未执行的
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
int 3肯定是被执行了的,原来的指令就未被执行了
|
能力值:
( LV9,RANK:140 )
|
-
-
12 楼
程序为什么会中断?
就是因为遇见了int3
所以,已经执行了
|
|
|