memory - 硬件和编译器如何处理跨入不可执行页面的 x86 指令?

标签 memory compiler-construction assembly x86

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

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

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

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

最佳答案

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

编译器不应该关心。

关于memory - 硬件和编译器如何处理跨入不可执行页面的 x86 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6659998/

相关文章:

c++ - 为什么指针访问比 vector::iterator 访问慢? (编译器代码生成)

c - 使用指令内在函数在 Hexagon DSP 中启用 HVX SIMD

arrays - Haxe 中的原始数组构建和访问

Python/Numpy 内存错误

java - 清理内存后Android应用程序崩溃

java - Java 5 中的动态编译选项

c# - C# 编译器和 JIT 都做了哪些优化?

c++ - 如何在 Solaris 上修复 SIGBUS

c - 如何使用 clang -emit-llvm 编译和保留 "unused"C 声明

c++ - ZTV、ZTS、ZTI 在 gdb x/nfu "vtable_address"的结果中意味着什么?