Assembly 什么';iret和iretd的区别是什么?

Assembly 什么';iret和iretd的区别是什么?,assembly,linux-kernel,x86,Assembly,Linux Kernel,X86,我想在Linux x86_64服务器上模拟iret条件。 我发现有三个说明 iret:操作数大小16 iretd:操作数大小32 iretq:操作数大小64 我分不清它们的区别,也分不清使用哪一种。 谢谢任何人的帮助 我还有一个关于模拟iret的问题,你能看一下吗?http://stackoverflow.com/questions/11756274/how-to-simulate-a-iret-on-linux-x86-64由此: IRET通过以下方式从中断(硬件或软件)返回 从堆栈中弹出IP

我想在Linux x86_64服务器上模拟iret条件。 我发现有三个说明

  • iret:操作数大小16
  • iretd:操作数大小32
  • iretq:操作数大小64
  • 我分不清它们的区别,也分不清使用哪一种。 谢谢任何人的帮助


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

    由此:

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

    IRETW将IP、CS和标志分别弹出2个字节,减少6个字节 整个堆栈。IRETD将EIP弹出为4个字节,再弹出4个字节 其中顶部的两个被丢弃,底部的两个进入CS,并且 将标志也弹出为4个字节,从堆栈中删除12个字节

    IRET是IRETW或IRETD的缩写,具体取决于 此时的默认位设置


    IRETQ也非常类似,它们都是相同的操作码0xcf。IRETQ具有64位代码的REX.W前缀。您所做的取决于处理器的模式和被中断代码的模式。不容易模拟。在大多数情况下,
    IRET
    将在当前CPU模式下从ISR正确返回。特殊情况可能需要
    IRETW/D/Q
    ,这将插入适当的指令前缀。我还有一个关于模拟iret的问题,你能看一下吗?