iret和iretd之间的区别是什么?

时间:2012-08-01 09:15:27

标签: assembly linux-kernel x86

我想模拟Linux x86_64服务器上的iret条件。 我发现有三条指令

  1. iret:操作数大小16
  2. iretd:操作数大小32
  3. iretq:操作数大小64
  4. 我无法区分它们,以及使用哪一个。 谢谢任何人的帮助!!

    我有另外一个关于模拟iret的问题,你能看看吗?http://stackoverflow.com/questions/11756274/how-to-simulate-a-iret-on-linux-x86-64

1 个答案:

答案 0 :(得分:8)

从此link

  

IRET通过中断(硬件或软件)返回   弹出IP(或EIP),CS和堆栈标志然后   从新的CS继续执行:IP。

     

IRETW将IP,CS和标志分别弹出2个字节,关闭6个字节   堆栈总计。 IRETD将EIP弹出为4个字节,再弹出4个字节   其中前两个被丢弃,而后两个进入CS,和   将标志弹出为4个字节,从堆栈中取出12个字节。

     

IRET是IRETW或IRETD的简写,具体取决于   当时默认的BITS设置。

非常类似于IRETQ