리버싱/ARM

실행 상태 변경

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

실행 상태 변경은 현재 익셉션 레벨보다 높은 익셉션 레벨로 진입한 상태에서 원래의 익셉션 레벨로 복귀하는 과정에서 이뤄진다

단, EL3는 더 높은 익셉션 레벨이 존재하지 않으므로 리셋을 통해 실행 상태를 변경해야 한다.

 

익셉션이 발생하거나 익셉션에서 복귀할 떄 익셉션 레벨이 동일하게 유지되면 실행 상태를 변경할 수 없다.

 

실행 상태 변경은 동작 중에 빈번하게 발생할 수 있다.

커널은 64비트, 애플리케이션은 32비트로 동작하는 상황을 예로 들어보자.

커널이 실행될 때는 aarch64로 변경되고, 애플리케이션이 실행될 때는 aarch32로 변경되어야 한다.

하이버파이저가 64비트, 게스트(Guest) OS는 32비트에서 동작하는 경우도 마찬가지다.

 

실행 상태의 변경에는 제약이 따른다.

aarch32로의 변경높은 익셉션 레벨에서 낮은 익셉션 레벨로 변경할 때만 가능하다.

aarch64로의 변경낮은 익셉션 레벨에서 높은 익셉션 레벨로 변경할 때만 가능하다.

 

실행 상태 변경

왼쪽의 aarch64에서 동작하는 커널은 aarch32에서 실행되는 32비트 애플리케이션과 aarch64에서 실행되는 64비트 애플리케이션을 모두 실행할 수 있다.

익셉션 레벨이 EL0에서 EL1으로 높아질 때는 실행 상태를 aarch32에서 aarch64로 변경하는 것이 가능하기 때문이다.

 

오른쪽의 aarch32에서 동작하는 커널은 aarch64에서 동작하는 64비트 애플리케이션을 실행할 수 없다.

익셉션 레벨이 EL1에서 EL0로 낮아질 때는 실행 상태를 aarch32에서 aarch64로 변경하는 것이 불가능하기 때문이다.

EL2에서 동작하는 하이퍼바이저도 같은 방식으로 동작한다.

 

반응형

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

프로세서 상태 레지스터(PSTATE)  (0) 2021.02.09
ARMv8 레지스터  (0) 2021.02.09
실행 상태  (0) 2021.02.09
Exception Level 변경  (0) 2021.02.09
ARMv8 Exception Model  (0) 2021.02.09