AI 요약
x86 아키텍처에서 정의되지 않은 명령어(undefined instruction)를 나타내는 ud2의 명칭 유래를 설명하는 글이다. 원래 x86에는 공식적인 무효 명령어가 없어서 개발자들이 0F FF와 0F B9 바이트 시퀀스를 각각 무효 opcode 예외 트리거로 사용했다. 인텔이 이 두 변형을 각각 ud0, ud1로 소급 명명하고, 권장 무효 opcode로 ud2를 공식 도입했다.
핵심 포인트
ud2는 아키텍처상 정의되지 않은 명령어로, 실행 시 반드시 "invalid opcode" 예외를 발생시킴- 컴파일러는
[[noreturn]]함수 등 unreachable 코드 표시용으로 ud2를 생성해 크래시를 유도 - 원래 0F FF(ud0)와 0F B9(ud1) 두 진영이 존재했으며, 인텔 신형 프로세서에서 0F FF가 더 이상 예외를 발생시키지 않아 문제 발생
- 이는 "충분한 사용자가 있으면 모든 관찰 가능한 동작에 의존하는 누군가가 생긴다"는 하이럼의 법칙 사례
- ud2는 파라미터 없는 2바이트 명령어라 디코딩 처리 부담이 없다는 장점
향후 전망
- 하위 호환성과 관찰된 동작 의존성 문제는 앞으로도 아키텍처 설계의 핵심 제약으로 남을 전망
- 컴파일러·런타임의 unreachable 코드 처리 방식에 대한 관심 지속
출처:hackernews
