Self-Improvement
** ARM Instruction 설명 (지속적 추가 예정) ** 본문
틀린점이 있다면 지적 바랍니다.
LDR
= 메모리에 있는 값을 레지스터에 저장한다.
ex)
LDR R2, [R11, #s]
// R2 = s
LDRB
= 메모리에 있는 값 1byte를 레지스터에 저장한다
ex)
MOV R3, #0x61
STRB R3, [R11,#var_5]
LDRB R3, [R11,#var_5]
// var_5 = 0x61, R3 = 0x61
STR
= 레지스터에 있는 값을 메모리에 저장한다
ex)
MOV R3, #5
STR R3, [R11,#var_68]
// var_68 = 5
STRB
= 레지스터의 값 1byte를 메모리에 저장한다
ex)
MOV R3, #0x61
STRB R3, [R11,#var_5]
// var_5 = 0x61
SUB
* 주소를 줄때 자주 사용된다. *
ex)
SUB R3, R11, #-s
// R3 = &s
STRH
= 레지스터에 있는 값 2byte를 저장한다
ex)
MOV R3,#0
STRH R3, [R11,#var_7C]
// var_7C = 0(2byte)
LDMIA
= 레지스터에 있는 값을 각 {레지스터}에 대입한다
ex)
ADD R2, PC, R2 ; "abcdefg"
LDMIA R2, {R0, R1}
// [R0] = [R2], [R1] = [R2+4]
// [R0] = "abcd", [R1] = "efg"
STMIA
= {레지스터}에 있는 값을 레지스터에 저장한다
ex)
SUB R3, R11, #-var_84
STMIA R3, {R0,R1}
// [R3] = "abcd", [R3+4] = "efg"
REV
= 엔디안을 변경하다.
LDR R8, [SP,#0xE8+buf]
REV R8, R8
MOVGT
= 크다
MOVLE
= 같거나 작다
MOVLS
= 작다.(Unsigned)
RSB
= SUB와 동일하지만 순서가 반대로 된다
SUB R0 R1 #0
= R0 = R1-0
RSV R0 R1 #0
= R0 = 0 - R1
'ARM' 카테고리의 다른 글
ARM - Buffer Overflow (Shellcode, r11을 덮자) (0) | 2021.01.15 |
---|---|
ARM - buffer Overflow 기초 (R11 -> &lr(돌아갈 주소를 갖는 레지스터)) (0) | 2021.01.15 |
(*) ARM char, pointer 종합? (LDMIA, STMIA) (0) | 2021.01.14 |
ARM의 함수 포인터(function pointer) 예제 (0) | 2021.01.12 |
ARM의 포인터(pointer) 사용예제 [R3] (0) | 2021.01.11 |