리버싱/ARM

ARM Assembly

cyanhe_wh 2021. 2. 9. 16:39
반응형

ARM CPU의 기본 구성

R0 ~ R15 총 16개의 범용 레지스터를 가지고 있다.

범용 레지스터 R13은 특수 레지스터 SP로 사용된다.

SP(Stack Pointer)는 스택의 주소를 저장하는 레지스터이다.

범용 레지스터 R14는 특수 레지스터 LR로 사용된다.

LR(Link Register)는 함수 호출 시 되돌아갈 함수의 주소를 저장하는 레지스터이다.

범용 레지스터 R15는 특수 레지스터 PC로 사용된다.

PC(Program Counter)는 다음 실행할 프로그램의 주소를 가지고 있는 레지스터이다.

 


명령어들

 

MOV

ARM에서 레지스터의 데이터 이동을 MOV 명령을 사용한다.

ex) MOV R0, R1   (R1의 내용을 R0으로 복사)

     MOV R0, #1   (상수 1을 R0으로 복사)

 

 

LDR (Load to Register)

LDR Rn, =Value

LDR을 사용하여 상수의 값을 레지스터에 저장할 때, =Value에서 =를 꼭 사용해야한다.

다른 명령어에서는 상수를 #으로 구분하지만, LDR만 =으로 구분한다.

 

ex) LDR R0, =100    LDR R1, =0x256

 

STR (Store to Register)

STR R0, [R1]  (R0의 값을 R1값에 참조하여 값을 넣는다.)

mov랑 다르게 왼쪽 값을 오른쪽으로 넣는다.

 

 

 

 

 

반응형

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

실행 상태  (0) 2021.02.09
Exception Level 변경  (0) 2021.02.09
ARMv8 Exception Model  (0) 2021.02.09
ARMv8  (0) 2021.02.09
ARM 크로스 컴파일러 및 실행  (0) 2021.02.01