ARM hack overview

Posted by : at

Category : reversing


ARM OverView

CISC (Complex Instruction Set Computer)

  • 명령어가 복잡하여 명령어를 해석하는 데 시간이 오래 걸리며
  • 명령어의 수가 많고 명령을 처리하는 시간이 길어 명령 처리 대기 시간이 길다.

명령어가 복잡하다?

하나의 명령어가   있는 일의 양이 RISC 대비하여 많다는 것을 의미
명령어 마다 길이가 다르며 동작에 있어 사이클 수도 다르기 때문에 pipelining 설계가 어렵다.
1~100 byte 이상 되는 명령어들  있다.

RISC (Reduced Instruction Set Computer)

  • CPU 명령어의 개수를 줄여 하드웨어 구조를 좀 더 간단하게 만드는 방식
  • 32비트로 명령어의 크기가 동일 하며 고정 길이를 갖는다.
  • 명령어의 개수가 적다.
  • 핵심적인 명령어를 기반으로 최소한의 명령어 집합을 구성하여 pipelining 기술을 도입하여 빠른 동작 속도와 하드웨어의 단순화와 효율성을 갖을 수 있으며 가격 경쟁령에서도 우위를 점하였다.

ARM 에서 RISC 방식을 사용하는 이유

  • ARM은 Berkeley RISC에서 파생되었다.
Load-Store 방식
Fixed-Length 32bit Instruction
3-address Instruction

ARM Processor Operation Mode

  • ARM 프로세서에는 총 7개의 동작 모드가 있다.
  • 동작 모드는 프로세서가 어떠한 권한을 가지고 어떠한 일을 처리하고 있는지 나타내는 프로세서의 동작상태를 의미한다.
  • 각각의 7개의 모드는 따로 SP(Stack Point)를 갖는다.
  • User,System은 같은 Stack을 사용한다.

User Mode (US) - CPSR M[10000]

  • 일반적인 어플리케이션 실행 모드
  • 사용자 작업이나 Application을 수행 할 때의 동작 모드로 모든 동작 모드 중 유일하게 Non-Privileged 권한이다.
  • 메모리, I/O 장치와 같은 시스템 자원을 사용하는데 제한을 두어 사용자의 실수를 방지한다.
  • SVC 모드로 이동하기 위해서는 Software Interrupt를 발생시킨다.

Fast Interrupt Mode (FIQ) - CPSR M[10001]

  • 빠른 인터럽트 처리를 위한 모드
  • 2개의 인터럽트 소스 중 빠르게 인터럽트를 처리할 수 있다.
  • 빠른 처리를 위해서 Exception Vector에서도 최하단에 존재하며 별도의 레지스터를 소유한다.

Supervisor Mode (SVC) - CPSR M[10011]

  • OS 보호 모드 (SW 인터럽트)
  • 시스템 자원을 자유롭게 관리 할 수 있는 동작 모드로 주로 커널, 디바이스 드라이버를 처리할 때 System Call 동작되는 모드
  • Reset 신호 입력 시 및 SWI가 발생하면 SVC mode로 전환된다.

Abort Mode (ABT) - CPSR M[10111]

  • 데이터, 명령어 Prefetch 중단 시 동작
  • 메모리에서 명령을 읽거나 데이터를 읽거나 쓸때 오류가 발생할 때 Abort Mode로 전환하여 오류를 처리한다.
  • 커널들의 패닉시 Abort Mode로 잔환되어 스택 내용이 전달됨을 알 수 있다.

Interrupt Mode (IRQ) - CPSR M[10010]

  • 범용 인터럽트 처리 모드
  • 일반적으로 사용되는 인터럽트로 외부 장치에서 요청되는 하드웨어적인 IRQ의 발생에 의해 ARM Core는 IRQ 모드로 전환하고 인터럽트를 처리한다.

System Mode (SYS) - CPSR M[11111]

  • OS 가 사용하는 특권 모드
  • user mode와 동일한 Register를 사용하고 동일한 용도로 사용된다.
  • 권한이 있고 없고 차이다.

Undifined Mode (UND) - CPSR M[11011]

  • 정의 되지 않은 명령어 예외 발생

CPSR

  • 5bit 데이터로 구성된 Status Register 내에 저장된 데이터이다.
  • 현재 모드의 Status 값을 저장하고 있다.
  • 우축 0~4bit인 총 5bit는 각 모드의 정보를 담고 있다.
  • 32bit중 나머지 bit는 N, Z, C, V로 컨디션 코드 및 기타 정보로 사용된다.

모드 변경

  • 인터럽트, 에러 또는 프로그래머로 인하여 모드가 변경된다.
  • 예외에 인하여 모드가 변경된다.

  • System Mode, User Mode는 동일한 Stack을 사용하여 Mode간의 차이가 없지만, User Mode에서 Device등의 자원을 사용하는데 있어 제한이 있다.
  • SVC Mode는 처음으로 Reset 되었을 때 접근되는 Mode이며 시스템 자원을 자유롭게 관리가 가능하여 별도의 Stack 공간을 사용한다.
  • UserMode에서 OS 단위를 사용하고자 할 때 시스템 자원이기 때문에 SVC Mode로 전환되어 사용할 권한을 얻으며 System Call이라고 부른다.

ARM Thumb 상태

  • v4T 이상은 Thumb 명령어 집합이라고 하는 16비트 명령어 집합을 정의한다.
  • Thumb 명령어 집합이 기능은 32비트 ARM 명령어 집합 기능의 하위 집합이다.
  • Thumb 명령어를 실행하는 프로세서는 Thumb 상태에서 작동한다.
  • ARM 명령어를 실행하는 프로세서는 ARM 상태에서 작동한다.
  • ARM 상태의 프로세서는 Thumb 명령어를 실행할 수 없고 Thumb 상태의 프로세서는 ARM 명령어를 실행할 수 없다.
  • 각 명령어 집합에는 프로세서 상태를 변경하는 명령어가 포함되어 있다.
  • ARM 프로세서는 항상 ARM 상태에서 코드 실행을 시작한다.

About Zer0Luck

Hi, my name is Young Woon.

Star this Project
Useful Links