x86 'ud2' 명령어의 이름 유래, 정의되지 않은 명령어의 역사
원제 Why is the x86 undefined instruction called ud2? Why 2?
154 포인트댓글 39
Key Point
x86 명령어 세트의 규격이 어떻게 역사적 사건과 호환성 문제로 인해 진화했는지 보여주며, 저수준 프로그래밍과 디버깅을 다루는 개발자에게 실제 명령어 동작의 배경을 이해하는 데 도움이 됩니다.
핵심 요약
- ud2는 x86 아키텍처에서 공식적으로 정의된 '항상 예외를 발생시키는' 명령어로, 컴파일러가 실행 불가능한 코드를 표시하거나 [[noreturn]] 함수가 반환되는 것을 감지하기 위해 생성합니다.
- 원래 x86에는 공식적인 정의되지 않은 명령어가 없어서 프로그래머들이 0F FF와 0F B9 같은 바이트 시퀀스를 찾아 비공식적으로 무효 명령어 예외를 트리거했습니다.
- 인텔이 새 프로세서를 출시했을 때 이런 바이트 시퀀스들이 더 이상 예외를 발생시키지 않거나 다른 동작을 하면서 기존 소프트웨어가 깨지는 현상(Hyrum's Law)이 발생했습니다.
- 인텔은 결과적으로 0F FF를 ud0, 0F B9를 ud1로 소급 명명하고, 새로운 공식 표준 명령어 ud2를 만들어 제공했습니다.
- ud2의 장점은 2바이트 명령어로 파라미터가 없어서, 메모리 접근 오류 발생 시 기존의 ud0/ud1처럼 일관되지 않은 예외(invalid opcode vs access violation) 문제가 없습니다.