p1n9
'Reversing' 태그의 글 목록

Reversing

Hacking/Reversing

[Reversing] RISC , CISC (feat. Thumb)

RISC, CISC , Thumb HTML 삽입 미리보기할 수 없는 소스 RISC HTML 삽입 미리보기할 수 없는 소스 RISC는 명령어의 길이가 4byte 고정길이이다. 명령어의 수가 적다 arm , mips가 대표적인 RISC언어이다. ARM 모드 ARM모드는 위에서 설명한 것이다. 고정길이가 4byte이고 명령어가 적다는 것이다. 하지만 초창기에 실제로 명령어가 4byte만큼 차지하는 것이 별로 없어서 2byte만으로 encoding하는 Thumb이 생겨났다. Thumb모드 2byte의 고정길이로 encoding 하여 사용하는 방식이다. 하지만 모든 명령어를 2byte로 인코딩하는 것은 불가능하므로 ARM과 Thumb를 같이 사용되게 됐다. Thumb-2가 나오고 나서는 표준 2byte지만 4by..

Hacking/Reversing

[Reversing] 리턴 값

리턴 값 HTML 삽입 미리보기할 수 없는 소스 int f() { return 123; } x86 HTML 삽입 미리보기할 수 없는 소스 f(): mov eax, 123 ret gcc / mvsc 둘 다 동일 ARM HTML 삽입 미리보기할 수 없는 소스 f(): movs r3, #123 mov r0, r3 bx lr r0 레지스트에 return value를 저장 MIPS HTML 삽입 미리보기할 수 없는 소스 f(): li $2,123 jr $31 $2($v0)에 return value를 저장 f(): jr $31 li $2,123 li와 jr의 위치가 변경 될 수도 있는데 이는 "브랜치 지연 슬롯"으로 인해 변경된 것이다. 브랜치 지연 슬롯은 RISC의 특징이다. 점프나 분기 명령어 다음에 위치하는 ..

Hacking/Reversing

[Reversing] 빈 함수

빈 함수 HTML 삽입 미리보기할 수 없는 소스 void f() { return; } X86 HTML 삽입 미리보기할 수 없는 소스 GCC f(): push rbp mov rbp, rsp nop pop rbp ret MVSC void f(void) PROC ; f push ebp mov ebp, esp pop ebp ret 0 void f(void) ENDP ; f RET : pop rip 명령어와 동일, 스택에 함수 복귀 주소를 저장 후 ret을 만나면 pop rip를 하면서 복귀 ARM HTML 삽입 미리보기할 수 없는 소스 f(): push {r7} add r7, sp, #0 nop mov sp, r7 ldr r7, [sp], #4 #Strack Frame bx lr BX LR(서브 루틴 복귀) :..