硬件和编译器如何处理跨越非可执行页面的x86指令?

Nyb*_*ble 6 memory compiler-construction x86 assembly

与(大多数)RISC arch不同,x86指令具有可变长度.指令的开始/结束不必对齐.如果编译器没有一条指令可能只是在页面边缘上.

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

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

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

nin*_*alj 5

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

编译器不应该在意.

  • 我似乎记得有一个与早期iapx286芯片处于保护模式的错误有关.要么是在通过边界的指令上失败了GPF,要么在错误地在适合内部的指令上错误地使用GPF.暂不记得... #trivia :-) (3认同)