AT 명령어 (Address Translate)
Summary
정의: 실제 메모리 접근 없이, 가상 주소를 지정한 예외 레벨/단계 기준의 MMU 변환 테이블에 통과시켜 결과(물리 주소 또는 폴트 정보)를 PAR_EL1에 기록하는 시스템 명령어.
용도: 페이지 테이블 설정 디버깅, 소프트웨어 페이지 테이블 워커 구현 시 활용됨.
문법
AT <op>, <Xt>
<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로 읽어옴
동작 흐름:
X0에 담긴 가상 주소를 지정된 조건(S1E1R = EL1, Stage 1, Read)으로 변환 시도- 실제 메모리 접근은 발생하지 않음 (읽기/쓰기 자체를 수행하는 게 아니라 “변환 가능 여부와 결과”만 확인)
- 변환 성공 시 물리 주소가, 실패 시 폴트 정보가
PAR_EL1시스템 레지스터에 기록됨 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 코드 전용) |