반응형

ARMv8 5

ARMv8 레지스터

aarch64는 64비트 크기의 범용 레지스터 31개(X0 ~ X30)를 제공한다. ARMv7에서 프로세서 모드(Processor mode)에 따라 제공되었던 별도의 레지스터들이 없어지고 하나의 레지스터 세트를 모든 익셉션 레벨에서 사용 가능하도록 변경한 것이다. 범용 레지스터에 접근할 떄 X0 ~ X30 이라는 이름으로 지정하면 64비트를 모두 사용하고, W0 ~ W30 이라는 이름으로 지정하면 이 중 하위 32비트만 사용한다.

리버싱/ARM 2021.02.09

실행 상태 변경

실행 상태 변경은 현재 익셉션 레벨보다 높은 익셉션 레벨로 진입한 상태에서 원래의 익셉션 레벨로 복귀하는 과정에서 이뤄진다. 단, EL3는 더 높은 익셉션 레벨이 존재하지 않으므로 리셋을 통해 실행 상태를 변경해야 한다. 익셉션이 발생하거나 익셉션에서 복귀할 떄 익셉션 레벨이 동일하게 유지되면 실행 상태를 변경할 수 없다. 실행 상태 변경은 동작 중에 빈번하게 발생할 수 있다. 커널은 64비트, 애플리케이션은 32비트로 동작하는 상황을 예로 들어보자. 커널이 실행될 때는 aarch64로 변경되고, 애플리케이션이 실행될 때는 aarch32로 변경되어야 한다. 하이버파이저가 64비트, 게스트(Guest) OS는 32비트에서 동작하는 경우도 마찬가지다. 실행 상태의 변경에는 제약이 따른다. aarch32로의 ..

리버싱/ARM 2021.02.09

Exception Level 변경

익셉션 레벨이 변경되면 코드 흐름과 권한도 변경되므로 정확한 변경 조건과 과정을 파악하는 것이 중요하다!! 익셉션이 발생하면 같은 익셉션 레벨이나 높은 익셉션 레벨로 이동한다. EL0에서 EL1으로 이동하는 것처럼 높은 익셉션 레벨로 변경하면 소프트웨어 실행 권한도 상승한다. 의도하지 않은 권한 상승이 발생하면 안되기 때문에 익셉션이 발생한 레벨보다 낮은 레벨에서는 익셉션을 받을 수 없다. 특히 EL0는 익셉션 핸들링이 불가능하므로 EL0에서 발생한 익셉션은 EL1 이상의 레벨에서 핸들링해야 한다. Exception 발생 상황 IRQ와 FIQ 인터럽트 시그널 메모리 시스템 abort 정의되지 않은(undefined) 인스트럭션 실행 시스템 콜 보안 모니터나 하이퍼바이저 트랩 익셉션 핸들링이 끝나고 이전 ..

리버싱/ARM 2021.02.09

ARMv8 Exception Model

프로세서를 바라보는 관점이 익셉션 레벨을 기준으로 변경되었다!! 익셉션은 시스템 흐름에서 벗어나 익셉션 핸들러의 처리를 필요로 하는 상태 또는 시스템 이벤트를 말한다. 익셉션 모델은 익셉션 타입과 상태, 프로세서의 익셉션 핸들링 루틴, 익셉션 복귀 등을 정의한다. 프로세서는 4개의 익셉션 레벨(EL0, EL1, EL2, EL3) 중 하나의 레벨에서 동작한다. 모든 익셉션 레벨에서 익셉션이 발생할 수 있다!! 익셉션 레벨이 높을수록 자원에 접근할 수 있는 권한 레벨도 높다!! ARMv7의 특권 레벨(privilege level)이 높을 수록 권한 레벨이 높은 것과 동일한 방식이다. 익셉션 레벨은 해당 레벨에서 동작하는 프로그램을 염두에 두고 디자인되었다. EL0는 유저 애플리케이션 EL1는 커널 EL2는 ..

리버싱/ARM 2021.02.09

ARMv8

ARM은 대표적인 RISC 계열 마이크로프로세서로, 구조가 단순하고 낮은 소비전력이 강점이다. ARMv4부터 시장의 성장기에 경쟁하던 아키텍처에 비해 저전력 고성능을 인정받으면서 자리 잡게 됬다. 시장의 요구에 따라 아키텍처가 지속적으로 발전하여 VFP와 SIMD 등 퍼포먼스를 위한 기능과 코드 크기 감소, 가상화와 시큐리티 지원 기능이 추가되며 현재의 ARMv8에까지 이르게 됬다. ARMv8은 Cortex-A/R/M 시리즈에 따라 다르게 구현된다. 이 중 가장 먼저 발표된 ARMv8-A는 애플리케이션 프로세서 프로파일에 해당한다. ARMv8의 가장 큰 특징은 64비트 아키텍처다. 하지만 실행 상태(execution state)라는 개념이 도입하여 32비트 ARMv7용 코드도 실행 가능하다. 실행 상태는..

리버싱/ARM 2021.02.09
반응형