Hacker News인프라 · 데브옵스

ARM 하이퍼바이저 디버깅기: NX 비트의 숨은 역할

원제 The NX bit is not just about security

102 포인트댓글 49
Key Point

ARM 하드웨어의 세부 구현이 표준을 벗어날 때 발생하는 미묘한 버그와 메모리 속성(NX 비트, 캐시 정책)이 코드 실행에 미치는 영향을 이해하는 데 필수적인 실제 사례입니다.

핵심 요약

  • ARM64 베어메탈 하이퍼바이저 개발 중 CTR_EL0 인터셉트를 활성화하면 시스템이 무작위로 잠기는 버그가 발생했습니다.
  • 초기 의심 대상들을 하나씩 검증했으나 예외 핸들러는 정상 작동했고, 실제 하드웨어에서만 레지스터가 수정되지 않았습니다.
  • 원인은 실행 가능한 머신 명령어가 담긴 버퍼를 정렬할 때 ARM의 I캐시/D캐시 비일관성(cache incoherency) 문제로, 캐시된 명령어가 메모리의 새로운 데이터와 불일치했습니다.
  • 이후에도 시스템이 부팅하지 않았으므로, MRS 명령어를 처리하는 C 핸들러 함수를 어셈블리로 재작성했을 때 문제가 해결되었습니다.
  • 최종적으로 이진 bisecting을 통해 논리적으로 동등한 두 코드 버전 중 하나만 작동하는 현상을 추적했고, NX 비트(실행 방지 비트) 설정이 데이터 섹션의 코드 실행을 막으면서 예상치 못한 동작을 유발했음을 암시합니다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗