x86의 정의되지 않은 명령어는 왜 ud2일까? 숫자 2의 비밀

Why is the x86 undefined instruction called ud2? Why 2?

x86 컴파일러 출력에서 종종 보이는 ud2 명령어는 의도적으로 invalid opcode 예외를 발생시킨다. 원래는 0F FF와 0F B9 두 바이트 시퀀스가 각각 사용되었으나, Intel이 새 프로세서에서 이들이 더 이상 예외를 일으키지 않도록 바꾸면서 문제가 생겼다. 이에 Intel은 두 방식을 각각 ud0, ud1로 소급 명명하고, 파라미터가 없는 2바이트 명령어 ud2를 공식 정의되지 않은 명령어로 채택했다.

충분히 많은 사용자가 있다면, 모든 관찰 가능한 동작은 누군가에 의해 의존된다.
  1. hacker_homie

    그리하여 마침내 0F FF 신봉자들은 보상을 받았으니, UD0라는 오피코드를 부여받아 유일무이한 진정한 원조 무효 오피코드가 되었고, 0F B9 신봉자들은 UD1이라는 수치를 영구히 뒤집어쓰게 되었다.

  2. 349ru3h4f03

    요즘은 UD0, UD1, UD2가 SDM과 APM에 들어 있다.

    우리는 또한 UDB(D6)도 얻었는데, 이는 64비트 모드를 위해 x86-64와 함께 등장한 1바이트 변형이다.

    그리고 우리에게는 항상 UDW(FF FF)가 있었으니, 일명 그룹 #5(첫 번째 FF)로 modrm 바이트가 mod=11b r/m=111b (/7) reg=111b(두 번째 FF)인 것인데, 이는 모든 비트가 1로 설정된 메모리, 또는 어떤 장치도 접근을 주장하지 않을 때 모든 1로 종단된 버스에 중요하다.

  3. gtirloni

    나는 최근에 무작위로 실패하는 빌드를 디버깅해야 했는데, V8에서 나온 ud2가 나를 기다리고 있었다.

  4. Neywiny

    나는 x86 사람은 별로 아니지만, 다른 아키텍처에서는 소프트웨어 인터럽트/예외를 발생시킬 수 있다. x86에는 이것이 없는 건가, 아니면 그런 기능이 충분한 사용 사례를 커버하지 못했던 건가?

  5. ordu

    > 0F FF 변형이 소급해서 ud0로 명명되고, 0F B9 변형이 소급해서 ud1로 명명되었기 때문에 ud2라고 불리며, ud2가 권장되는 정의되지 않은 오피코드로 남게 되었다.

    독자로서 나에게는 놀라움이었다. 이 문장에 이르렀을 때 나는 0f ff가 #1이 되고 0fb9가 #2가 될 거라고 생각했다. 하지만 아니다, Intel은 0부터 세기 때문에 세 번째 ud가 있는 것이다.

이 날의 다른 글

2026-09-13