본문 바로가기

Reversing

07. arm 어셈블리어 정리

1. ASL, ASR, LSL, LSR, ROR, ROL


ASL : 왼쪽으로 쉬프트 , 빈자리는 부호로 채움

ASR : 오른쪽으로 쉬프트 , 빈자리는 부호로 채움

LSL : 왼쪽으로 쉬프트 ,  빈자리는 0으로 채움

LSR : 오른쪽으로 쉬프트, 빈자리는 0으로 채움

ROR : 오른쪽으로 로테이션

ROL : 왼쪽으로 로테이션


2. MOV


ex) MOV r0, [r1, r2] : r0에 r1+r2 주소 값을 읽어서 저장

     MOV r0, r1, ROR #1 : r1을 오른쪽으로 한 비트 로테이션 후 그 값을 r0에 저장


3. 산술 명령어


ex) ADD r1, r2 #4 : r2에 4를 더해서 r1에 저장

     SUB r1, r1, #1 : r1에서 1을 뺌

     ORR r1, r2, r3 , LSL r4 : r3을 r4 만큼 왼쪽으로 쉬프트 한 후, 결과를 r2와 OR 연산하여 r1에 저장


4. 분기 명령어


ex) B it : 라벨이 it 인 곳으로 무조건 분기 (intel 에서 jmp 와 동일)

     BEQ it : 플래그가 0이면 분기, 아니면 다음 명령어 수행 (je와 동일)

     BNE it : 플래그가 0이 아니면 분기, 아니면 다음 명령어 수행 (jnz와 동일)

     BL sub+ROM : 계산된 위치의 서브루틴을 호출

     CMP r1, #4 : r1과 4를 비교


5. 로드, 스토어 명령


LDRB : Byte 변수를 불러올 때 사용

LDRH : Short 변수를 불러올 때 사용

LDR : int 변수를 불러올 때 사용

STR 또한 마찬가지로 뒤에 B 가 붙을 시 Byte 변수, H가 붙을 시 Short 변수를 저장한다. 

반응형

'Reversing' 카테고리의 다른 글

09. Anti-Debugging  (0) 2018.06.15
08. angr  (0) 2017.11.01
06. gdb 명령어 정리  (0) 2017.09.29
05. 스택, 스택프레임  (0) 2017.08.04
04. 함수 호출 규약  (0) 2017.08.02