ARM 아키텍쳐
2024년 11월 5일
ARM32 의 모드 (Thumb, ARM) #
ARM32 에서는 더 작은 명령어 크기로 임베디드 시스템에서 메모리 공간을 절약하기 위해 Thumb 모드 라는 것을 만들었는데 Thumb 모드는 명령어가 2byte이고, ARM 모드는 명령어가 4byte이다.
CPU는 이것을 구분하기 위해서 실행할 명령어의 주소를 보고 판단한다. ARM 모드는 4byte 단위로 명령어가 정렬되어 있고, Thumb 모드는 2byte 단위지만 홀수 주소(PC의 LSB가 1)에서 실행된다.
ARM 어셈블리를 실행하다가 홀수 주소로 점프하면 Thumb 명령어로 인식하면 된다.
ARM64 의 모드 (AArch64, AArch32) #
기존의 ARM32로 빌드한 프로그램을 실행할 수 있도록 ARM64 CPU에서는 AArch32 모드를 지원한다. 하지만 이것은 기존 프로그램에 대한 호환성 유지 측면이지, ARM64 시스템 타겟으로 빌드할땐 AArch64 모드로만 빌드된다.
모든 명령어는 4byte이며 하나의 프로그램에서 AArch64와 AArch32 명령을 섞어서 사용할수는 없다.
코드 서명 (Pointer Authentication) #
함수 포인터나 리턴 주소 등 중요한 포인터가 조작되는 것을 방지하는 기술이다.
callee-saved 레지스터 #
콜링컨벤션에 따라 보존레지스터와 비보존 레지스터가 있다.