NX 비트는 보안만을 위한 것이 아니다

The NX bit is not just about security

ARM64 하이퍼바이저 개발 중 CTR_EL0 인터셉트를 활성화하면 시스템이 무작위로 멈추는 난해한 버그를 추적한 과정을 다룬다. C 핸들러가 정상 작동하는데도 불구하고 시스템이 부팅되지 않자, 저자는 어셈블리 수준에서 이진 탐색을 통해 문제를 좁혀 나간다. 결국 원인은 동적 호출(blr)과 정적 호출(bl)의 차이에서 발생한 분기 예측 오류로, 잘못된 예측이 MMIO 접근을 유발해 시스템이 멈춘 것으로 밝혀진다. 이는 NX 비트가 단순한 보안 기능이 아니라, 하드웨어의 미세 아키텍처 동작과도 연관되어 있음을 보여준다.

두 명령어는 어떻게 다를까? `blr x0`는 동적이고, `bl get_ctr_el0`는 정적이다. 동적 디스패치는 분기 예측을 사용하지만, 정적 분기는 목적지를 미리 알고 있어 잘못 예측할 수 없다. 명령어가 잘못 예측되면 무엇으로 잘못 예측될까? ... 아마도 널 포인터, `0x0`일 것이다.

이 날의 다른 글

2026-09-07