HeadlinesBriefing favicon HeadlinesBriefing.com

为什么 x86 未定义指令叫 ud2?

Hacker News •
×

ud2 指令是 x86 上一条架构层面的未定义操作码,它能可靠地触发“无效操作码”异常。编译器利用它来标记“不可达”代码,确保一旦执行流程真正到达该处,程序就会崩溃。最初并没有官方的未定义指令,因此程序员依赖 0F FF0F B9 这样的字节序列来触发异常。这些序列在内部被解码为带有两个未使用参数的指令。当 Intel 引入的变更破坏了 0F FF 的行为时,依赖它的软件随之失效,这正是 Hyrum 定律的体现。为了提供一个稳定的解决方案,Intel 正式创建了 ud2,并追溯性地将旧变体命名为 ud0ud1。与前身不同,ud2 是一条干净的双字节指令,没有参数,避免了可能导致访问违规而非无效操作码异常的解码问题。这使得 ud2 成为触发故意崩溃的统一、推荐选择。

命名反映了这段历史:0F FF 变成了 ud00F B9 变成了 ud1,而新的官方指令被命名为 ud2ud2 的关键优势在于其架构层面的保证,确保无论内存页是否存在或处理器实现细节如何,都能表现出可预测的行为。