Skip to the content.

AT 명령어 (Address Translate)

Summary

정의: 실제 메모리 접근 없이, 가상 주소를 지정한 예외 레벨/단계 기준의 MMU 변환 테이블에 통과시켜 결과(물리 주소 또는 폴트 정보)를 PAR_EL1에 기록하는 시스템 명령어.

용도: 페이지 테이블 설정 디버깅, 소프트웨어 페이지 테이블 워커 구현 시 활용됨.


문법

AT <op>, <Xt>

주요 op 옵션

op Stage Exception Level 권한
S1E0R Stage 1 EL0 Read
S1E0W Stage 1 EL0 Write
S1E1R Stage 1 EL1 Read
S1E1W Stage 1 EL1 Write

참고: 이 외에도 EL2/EL3 및 Stage 2 관련 확장 옵션이 존재하나, 커널/하이퍼바이저 수준에서만 의미가 있어 일반적으로는 위 4개가 가장 자주 언급됨.


예제 코드

AT S1E1R, X0      // X0의 가상주소를 EL1 stage 1, Read 기준으로 변환 시도
MRS X1, PAR_EL1   // 변환 결과(물리주소 또는 폴트정보)를 X1로 읽어옴

동작 흐름:

  1. X0에 담긴 가상 주소를 지정된 조건(S1E1R = EL1, Stage 1, Read)으로 변환 시도
  2. 실제 메모리 접근은 발생하지 않음 (읽기/쓰기 자체를 수행하는 게 아니라 “변환 가능 여부와 결과”만 확인)
  3. 변환 성공 시 물리 주소가, 실패 시 폴트 정보가 PAR_EL1 시스템 레지스터에 기록됨
  4. MRS 명령어로 PAR_EL1 값을 읽어와 결과 확인

특권 레벨 제약

핵심 제약: AT 명령어는 EL1(커널) 이상 특권 레벨에서만 실행 가능한 시스템 명령어임.

결과적 영향: 일반 사용자 애플리케이션(EL0, macOS 일반 프로그램)에서는 사용 불가하며, 커널 소스, 하이퍼바이저, 부트로더 수준 코드에서만 관찰됨. 이 때문에 일반적인 macOS 어셈블리 분석에서는 마주칠 일이 거의 없는 명령어임.


PAR_EL1 결과 해석

PAR_EL1에 기록되는 결과는 변환 성공 여부에 따라 형식이 달라짐:

상황 PAR_EL1 내용
변환 성공 물리 주소 + 속성 정보(캐시 정책 등)
변환 실패(Fault) Fault Status Code + 오류 관련 정보

판단 방법: PAR_EL1의 특정 비트(F 비트 등)를 확인하여 성공/실패를 구분한 후, 성공 시에만 물리 주소 필드를 유효한 값으로 해석해야 함.


LR과의 명확한 구분 (이전 혼동 정리)

구분 LR (X30) AT
분류 범용 레지스터 별칭 시스템 명령어
역할 함수 복귀 주소 저장 가상→물리 주소 변환
특권 레벨 EL0에서도 사용 EL1 이상 필요
관찰 빈도 매우 높음 매우 낮음 (커널/MMU 코드 전용)