阅读:1208回复:6
To pjf 增加我自己的中断的问题
我修改了,中断描述符表的第36号,使他指向我的中断处理例程,DPL为3,我的中断例程里面就只有一条指令 iret。我的应用程序如下
int main() { _asm int 36 ret 0; } softice观察,进到了我的中断例程,可是执行iret的时候,protection fault。是怎么回事呢? |
|
沙发#
发布于:2002-06-27 10:42
你的IRET生成的机器码是什么?不会是66 CF吧?呵呵
IRETD 改了再说,还不对的话就要看看你前面是不是把stack搞乱了。 |
|
板凳#
发布于:2002-06-27 11:03
我看看!
|
|
地板#
发布于:2002-06-27 11:16
好了,果真如此!
|
|
地下室#
发布于:2002-06-27 12:55
你的IRET生成的机器码是什么?不会是66 CF吧?呵呵 What is IRETD?? Thx |
|
|
5楼#
发布于:2002-06-27 12:59
很多编译/汇编器在32为环境将IRET译码成16的兼容形式(即加上了操作数前缀),因而要写为对应的IRETD(就是32环境的IRET)
|
|
6楼#
发布于:2002-06-27 16:03
pjf兄说的不错,很多汇编器将iret和iretd统一用iret表示,具体是16位操作数还是32位操作数,看当时的运行环境,诸如是实模式还是保护模式,是从v86模式返回还是返回到v86模式,有无进行任务的切换等等,详细说明可以看看intel的软件开发手册第二卷,对于你这种情况,应用iretd指令从ring 0返回到ring 3
|
|