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 |
아무 동작도 하지 않음 |