【问题标题】:How does hardware and compiler deal with an x86 instruction that crosses into a non-executable page?硬件和编译器如何处理跨入不可执行页面的 x86 指令?
【发布时间】:2011-10-03 08:26:38
【问题描述】:

与(大多数)RISC 架构不同,x86 指令具有可变长度。指令的开始/结束不必对齐。如果编译器没有,一条指令可能只是位于页边距。

假设如果指令的第一个字节位于页面的最后一个字节,则该页面被标记为可执行。指令的其余字节在第二页,被标记为不可执行。

在这种情况下,当执行到这条指令时,CPU会发生什么?

编译器需要关心这种情况吗?

【问题讨论】:

  • 支持不明原因的反对票。
  • 当下一页可执行时,它就可以工作了。获取是在对齐的块中完成的,为解码器提供一个队列。在 fetch 之后,在 TLB 检查之后,合并来自不同页面的字节,因此它不像页面拆分数据加载。

标签: memory compiler-construction assembly x86


【解决方案1】:

硬件将(应该,尚未测试)生成 GPF。

编译器不应该关心。

【讨论】:

  • 我似乎记得一个与早期 iapx286 芯片处于保护模式的错误有关。要么它会在一条越过边界的指令上执行 GPF 失败,要么会错误地在一条应该正好适合其内部的指令上执行 GPF。暂时不记得了...#trivia :-)
猜你喜欢
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多