Reversing/Skill

[Assembly] 기본 명령어

BadSchool 2017. 5. 13. 02:43

어셈블리 언어는 리버싱을 하기 위한 가장 기초 지식이다.

프로그래밍탭에 쓸까 이곳에 쓸까 고민많이 했는데, 깊게 들어가진 않을 거라 이곳에 쓴다.


레지스터

CPU에서 사용 하는 기억장소로, C언어로 빗대어 표현하자면 변수라고 봐도 무방하다.

이 곳에서는 80x86 프로세서를 기반으로 설명한다.


레지스터의 종류

데이터 레지스터

EAX, EBX, ECX, EDX


포인터 레지스터

ESP, EBP


인덱스 레지스터 (Index register)

ESI, EDI


세그먼트 레지스터 (Segment register)

CS, DS, SS, ES


명령어 구성

명령어 종류

push

push eax

eax의 값을 스택에 저장 

pop 

pop eax

스택의 값을꺼내 eax에 저장 

mov 

mov eax, ebx

ebx의 값을 eax에 옮김 

lea 

lea eax, ebx 

ebx의 주소값을 eax에 옮김

inc 

inc eax 

eax++ 

dec 

dec eax 

dec-- 

sub 

sub eax, ebx 

eax에서 ebx를 뺀 값을 eax에 저장

call 

call abc 

abc라는 함수를 호출 

ret 

ret 

호출한 바로 다음 지점으로 이도 

cmp 

cmp eax, ebx 

eax와 ebx값을 비교 (매우 자주 나옴) 

jmp 

jmp abc 

abc라는 곳으로 이동 

int 

int 3

인터럽트, 안티디버깅 기법중 하나로도 쓰임

nop 

nop 

아무 동작도 하지 않음