Article

Why do we need ud2 when int 6 is right there?

The Old New Thing ·The Old New Thing ·Published 2026-10-19 ·5 min read

This article discusses the architectural differences between the ud2 instruction and the int 6 instruction, highlighting how they handle faults and traps differently in the context of exception handling.

From the article

Some time ago, I mentioned that the ud2 instruction was created to be an architecturally undefined instruction . But why not just use an int 6 instruction? It’s a two-byte instruction, just like ud2 , and interrupt vector 6 is the invalid opcode vector, so a program could just invoke it manually and get whatever behavior the operating system assigns to an attempt to execute an invalid opcode.

Architecturally, the invalid opcode is a fault , which means that the address of the faulting instruction is reported to the exception handler. On the other hand, the int 6 is a trap , which means that the address of the instruction after the int 6 is reported to the handler.

This distinction between faults and traps reflects how they are used. A fault represents an error that the kernel could…


Share this resource


Discovered 2026-10-20 Source The Old New Thing Archive 2026-10 →