리버싱/ARM

프로세서 상태 레지스터(PSTATE)

cyanhe_wh 2021. 2. 9. 21:53
반응형

PSTATE는 프로세서 상태(Processor STATE) 정보를 제공하는데, aarch64 전용, aarch32 전용,

aarch64와 aarch32의 공통 속성으로 구성된다.

ARMv7에서 현재 프로세스 정보를 나타내는 CPSR과 1:1 대응하지 않는다.

 

 

aarch64 전용

이름 타입 설명
D(Debug) 익셉션 마스크 이 비트가 설정되면 디버그 익셉션 발생을 막는다.
SP(Stack Pointer selector) 실행 살태 제어 사용할 스택 포인터를 선택한다.
0은 SP_EL0사용하고, 1은 SP_ELx를 사용한다.

 

공통

이름 타입 설명
N(Negative) 조건 플래그 연산 결과가 음수인 경우 설정
Z(Zero) 조건 플래그 연산 결과가 0인 경우 설정
V(Overflow) 조건 플래그 캐리가 발생할 경우 설정 (덧셈에서 부호 없는 오버플로)
A(SError) 익셉션 마스크 이 비트가 설정되면 System Error 익셉션 발생을 막는다
I(IRQ) 익셉션 마스크 이 비트가 설정되면 IRQ 익셉션 발생을 막는다
F(FIQ) 익셉션 마스크 이 비트가 설정되면 FIQ 익셉션 발생을 막는다
SS(Software Step) 실행 상태 제어 SS가 활성화된 상태에서 1은 active-not 펜딩 상태이고,
0은 active 펜딩 상태를 의미한다.
IL(Illegal Execution State) 실행 상태 제어 이 비트가 설정되면 임의의 명령을 실행하기 위한 어떤 시도도 Illegal Execution State 익셉션을 유발한다
EL(Exception Level) 실행 상태 제어 현재 익셉션 레벨을 나타낸다
nRW 실행 상태 제어 현재 실행 상태를 나타낸다
0은 aarch64, 1은 aarch32 실행 상태

 

aarch32 전용

Q(cumulative saturation) 상태 플래그 인스트럭션 수행 결과 오버플로나 포화(saturation)가 있었음을 나타낸다
GE(Greater than or Equal) 상태 플래그 SIMD 인스트럭션에서 각 바이트나 하프워드 연산 결과
오버플로가 발생할 경우 설정
IT(If-Then) 실행 상태 Thumb-2 인스트럭션 세트의 조건부 실행 처리에 사용
J(Jazelle) 실행 상태 Jazelle 실행 상태임을 표시
T(T32) 실행 상태 Thumb 실행 상태임을 표시
E(Endianness) 실행 상태 제어 엔디안을 설정하고 읽을 때 사용
M(Mode) 실행 상태 제어 프로세서 모드를 설정하고 읽을 때 사용

NZCV와 DAIF 필드는 EL0에서도 접근 가능하며, 그 외 비트는 EL1 이상에서만 접근 가능하다.

익셉션이 발생했을 떄 PSTATE가 갱신되고 몇몇 비트가 SPSR_ELn 레지스터에 복사되며,

익셉션에서 복귀할 떄 SPSR_ELn 레지스터가 PSTATE로 복사된다.

반응형

'리버싱 > ARM' 카테고리의 다른 글

시스템 레지스터  (0) 2021.02.09
aarch64 특수 목적 레지스터  (0) 2021.02.09
ARMv8 레지스터  (0) 2021.02.09
실행 상태 변경  (0) 2021.02.09
실행 상태  (0) 2021.02.09