ARMV7
Posts
18 posts[Arm프로세서][Armv7] 트러스트존(TrustZone): 시큐어 월드로 실행 흐름이 변경되는 과정
이번에는 Armv7 아키텍처에서 정의된 전체 동작 모드를 보면서 논 시큐어 월드에서 시큐어 월드로 실행 흐름이 바뀌는 과정과 이 때 SCR.NS 비트가 어떻게 바뀌는지 알아봅시다. 그림 11.4 모드, privilege 레벨과 시큐리티 상태들 먼저 그림을 넓은 시야로 봅시다. 그림의 왼쪽 부분은 논 시큐어 상태, 오른쪽 부분은 시큐어 상태를 나타냅니다. 각 박스 내에 PL이 보이는데 이는 Privilege level의 약자이며 권한 수준을 나타냅니다. 권한 수준이 낮은 User 모드는 PL0이고, 시스템 레벨로 권한 수준이 있는 System, IRQ, Undef, Abort, Supervisor 모드는 PL1입니다. 그런데 그림의 오른쪽 부분에도 PL0에 해당되는 User 모드, PL1에 해당되
[Arm프로세서][Armv7] 트러스트존(TrustZone): 시큐어 상태와 Secure Control Register(SCR)
트러스트존 아키텍처에서 논 시큐어 월드와 시큐어 월드를 기준으로 트러스트존의 주요 개념을 설명합니다. 그런데 Arm 아키텍처의 스팩 문서를 살펴보면 시큐어 상태와 논 시큐어 상태라는 용어를 만나게 됩니다. 시큐어 상태와 논 시큐어 상태는 시큐어 월드와 논 시큐어 월드와 거의 유사한 개념인데, 트러스트존의 구현 레벨에서 쓰이는 용어입니다. 먼저 시큐어 상태와 논 시큐어 상태에 대해 알아봅시다. 어떤 코드가 실행 중인데 현재 코드가 논 시큐어 월드 혹은 시큐어 월드에서 실행 중인지 어떻게 알 수 있을까요? Armv7 아키텍처에서는 이 정보를 저장하는 레지스터를 설계했는데 이를 Secure Control Register(SCR) 레지스터라고 합니다. 이번에는 Arm 스팩 문서를 보면서 Secure Cont
[Arm프로세서] Armv7: subs와 movs 명령어를 실행해 Arm 동작 모드 변경
Arm 동작 모드를 바꾸는 다른 방법은 spsr 레지스터의 [7:0] 비트를 변경하고 다음과 같은 형식의 명령어를 실행하는 것입니다. ❑ subs pc, lr, #4 ❑ movs pc, lr sub은 뺄셈 연산, mov는 레지스터의 값을 이동시키는 연산을 수행하는 명령어입니다. 그런데 위 명령어를 보면 각 명령어의 끝에 s와 같은 접미사가 있습니다. Arm 코어가 위와 같은 ‘subs’ 혹은 ‘movs’ 명령어를 보면 내부적으로 다음과 같이 실행합니다. ❑ spsr 레지스터의 값을 cpsr 레지스터에 백업하자. ❑ spsr 레지스터의 M[4:0]에 저장된 모드로 변경하자. 위와 같은 동작은 하드웨어적으로 수행됩니다. [중요]mov와
[Arm프로세서] AAPCS: Armv7: 함수 반환형은 워드 단위로 지정
함수를 반환하는 자료형은 워드 단위로 제한하는 것이 좋습니다. 워드형인 경우 반환값은 R0 레지스터에 저장하나, 데이터가 워드 범위를 벗어난 경우 R0와 R1레지스터에 반환값을 나눠서 처리하기 때문입니다. [정보]위에서 언급한 워드형이 무엇인지 알아봅시다. 워드(word)는 어셈블리 명령어로 연산 결과를 레지스터에 저장할 수 있는 데이터 단위입니다. 그렇다면 함수가 반환하는 타입이 무엇인지 파악하려면, 함수 선언부의 가장 앞 부분을 보면 됩니다. 예를 들어 이번 소절에서 소개한 add_func() 함수는 int 형의 인자를 반환합니다. int add_func(int a, int b, int c, int d, int e); 대부분 함수가 반환하는 자료형은 워드 타입으로, int, unsinged int


![[웹툰단행본] 『통제구역관리부』 1권 후기 : 이상한 변칙과 기이한 일들이 일어나는 공간에 대하여](https://img.zoomtrend.com/2026/06/09/1780996474-SE-5eda86fa-0d63-4afd-b8dd-b801879fed52.jpg)
