ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:1208回复:6

To pjf 增加我自己的中断的问题

楼主#
更多 发布于:2002-06-27 10:36
我修改了,中断描述符表的第36号,使他指向我的中断处理例程,DPL为3,我的中断例程里面就只有一条指令 iret。我的应用程序如下
int main()
{
_asm int 36
ret 0;
}

softice观察,进到了我的中断例程,可是执行iret的时候,protection fault。是怎么回事呢?
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-27 10:42
你的IRET生成的机器码是什么?不会是66 CF吧?呵呵
IRETD
改了再说,还不对的话就要看看你前面是不是把stack搞乱了。
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-27 11:03
我看看!
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-27 11:16
好了,果真如此!
Nouk
驱动中牛
驱动中牛
  • 注册日期2001-08-22
  • 最后登录2006-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-27 12:55
你的IRET生成的机器码是什么?不会是66 CF吧?呵呵
IRETD
改了再说,还不对的话就要看看你前面是不是把stack搞乱了。

What is IRETD??
Thx
Taiwan's Driver Developer
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-27 12:59
很多编译/汇编器在32为环境将IRET译码成16的兼容形式(即加上了操作数前缀),因而要写为对应的IRETD(就是32环境的IRET)
yanghui
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2009-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-27 16:03
pjf兄说的不错,很多汇编器将iret和iretd统一用iret表示,具体是16位操作数还是32位操作数,看当时的运行环境,诸如是实模式还是保护模式,是从v86模式返回还是返回到v86模式,有无进行任务的切换等等,详细说明可以看看intel的软件开发手册第二卷,对于你这种情况,应用iretd指令从ring 0返回到ring 3
游客

返回顶部