Lobsters | 📄 原文链接 | 2026-10-22 收录

既然有 int 6,为什么还要 ud2?故障与陷阱的区别

来源:devblogs.microsoft.com — 2026-10-19

📋 概述

Raymond Chen 回答一个看似挑刺的问题:ud2 就是一条两字节的“架构上未定义”指令,而 int 6 也只有两字节、6 号中断向量正是无效指令,为什么还要专门造 ud2?答案是故障与陷阱的语义差别:无效指令是 fault,处理器报告的返回地址指向出错的那条指令;int 6 是 trap,返回地址指向它的下一条。用 int 6 假冒 #UD,处理器会拿着一条合法指令的地址去解释为什么触发了无效指令。再加上保护模式下用户态本就无权执行 int 6,操作系统一律禁止,假冒这条路彻底堵死。

🔑 核心要点

💡 金句

To get the #UD undefined instruction fault, you have to issue an actual undefined instruction.
← 返回 Lobsters 首页