5

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

  1. iret:操作数大小 16
  2. iretd:操作数大小 32
  3. iretq:操作数大小 64

我无法区分它们,以及使用哪一个。感谢任何人的帮助!

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

4

1 回答 1

13

从这个链接

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

IRETW 将 IP、CS 和标志分别弹出 2 个字节,总共从堆栈中取出 6 个字节。IRETD 将 EIP 弹出 4 个字节,再弹出 4 个字节,其中顶部两个被丢弃,底部两个进入 CS,并将标志也作为 4 个字节弹出,从堆栈中取出 12 个字节。

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

IRETQ 也非常相似

于 2012-08-01T10:49:04.193 回答