首页
社区
课程
招聘
[旧帖] 2个奇怪的问题 0.00雪花
发表于: 2010-11-10 21:01 3759

[旧帖] 2个奇怪的问题 0.00雪花

2010-11-10 21:01
3759
最近学到了中断和异常处理,很多疑惑,下面2个问题尤其让我晕:
在讲到异常中的陷阱的时候,书上说:当控制转移到异常处理程序的时候,所保存的断点CS及EIP的值指向引起陷阱的指令的下一条要执行的指令。下一条要执行的指令,不一定就是下一条指令。因此,陷阱处理程序并不总是能根据保存的断点,反推出产生异常的指令。其中:下一条要执行的指令,不一定就是下一条指令,我不太明白,能举个例子吗?

在列举故障类异常:段不存在故障的时候,书上说:在进入故障处理程序时,保存的CS及EIP指向发生故障的指令;或者该故障作为任务切换的一部分发生时,指向任务的第一条指令。对于:作为任务切换的一部分发生时,指向任务的第一条指令,我也想不太明白,能举个例子吗?

谢谢!!

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
jmp xxx
int 3
2010-11-10 21:39
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
蜗牛兄,你的2句指令,我分析了下,还是不太理解,能否明示?
1。在陷阱发生的时候,转入陷阱处理程序,然后返回,但并不返回到产生陷阱异常的那句指令的下一句指令。我还是想不到对应的情形,不管是 jmp xxx 还是 int 3。
2。第二种情景我的理解是:在任务切换过程中,如果发生段不存在故障,那么会把段载入内存使之存在,并且在其他验证都正确的情况下,直接转向新任务的第一条指令,而不必重新执行那句引起故障的指令,这样理解是否正确?(难道是为了效率考虑?)

谢谢!
2010-11-11 10:26
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
对于第一个问题,我的理解是:
0x0001 some operation
0x0002 int 3                  
0x0003 other operation
.....

0x1000 far operation

所保存的断点CS及EIP的值指向引起陷阱的指令的下一条要执行的指令。就是下一条指令的情况:

中断时保存的tip
eip = 0x0003

下一条要执行的指令,不一定就是下一条指令的情况:
eip = 0x1000

我是这样理解的,不知道对不对,至于为什么会这样,不知道
2010-11-11 10:57
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
哈哈,情形却是是这样,关键在于为什么以及在哪种情况下会有这种情形的发生
2010-11-11 12:03
0
游客
登录 | 注册 方可回帖
返回
//