DOSBox 안에서 DOSBox를 감지하기
·2026.04.18 01:13
핵심 내용
DOSBox 전용 FE/7 callback opcode로 실행 환경을 식별하는 법.
자세히 보기
MOUNT.COM을 디스어셈블해 보니 FE 38 00 00 같은 바이트열이 등장하고, DOSBox는 여기에 전용 FE /7 callback opcode를 넣어 둔다.
- 일반 x86에서는
FE /7이 invalid opcode라서#UD가 발생한다. - DOSBox에서는 이 바이트열이 callback 호출로 해석되므로, 사실상 4바이트 NOP처럼 동작한다.
이 성질을 이용해 DOSBox 여부를 가리는 방법을 만든다. INT 06h 예외 핸들러를 설치한 뒤, 예외가 났을 때 현재 IP 근처의 바이트가 FE 38 00 00인지 확인한다.
- 맞으면 DOSBox가 아닌 환경이므로 IP를 건너뛰고 정상 복귀한다.
- 예외가 발생하지 않고 코드가 그대로 이어지면 DOSBox 계열 환경일 가능성이 높다.
초기에는 86Box에서 테스트했지만 예상과 다르게 동작했는데, 원인은 PCem에서 이어진 버그였다. ModR/M opcode modifier가 0이 아닌 값을 전부 FE /1로 처리해, FE /2, FE /4, FE /7이 모두 DEC처럼 실행되고 있었다. 이 문제는 이미 상위 저장소에 수정이 반영되었다.
작성자는 이 기법이 단순 BIOS 문자열 검사보다 훨씬 내재적인 DOSBox 식별법이라고 보고, 실제로는 더 흔한 DOS 환경들(NTVDM, Win9x DOS Prompt, DOSEMU 등)은 더 쉽게 구분할 수 있지만, 이 방식이 가장 까다로운 사례였다고 정리한다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.