어셈블리어 기초
2020. 10. 13. 17:59ㆍ어셈블리어
EIP : 다음 실행할 명령어 주소
EBP : 스택의 제일 높은 주소 (기준점)
ESP : stack의 제일 아래 부분, 현재 진행 stack 지점
1. push : 스택에 값을 저장한다. PUSH 후에는 스택이 4byte 증가, ESP 레지스터가 4byte 감소
extern printf -> printf 라이브러리를 가져온다
push ebp -> ebp 값을 스택에 저장
mov ebp, esp -> 현재 esp 값을 ebp에 대입
mov eax, 10 -> eax에 10을 넣기
EAX 레지스터는 산술(덧셈, 곱셈, 나눗셈 등), 논리 연산을 수행하여 함수의 반환값이 이 레지스터에 저장됨.
즉, 덧셈, 곱셈, 나눗셈 등의 명령은 모두 EAX 레지스터를 사용
add eax, 20 -> eax 값에 20을 더함
push eax -> eax 값을 스택에 저장
2. CALL : 함수 호출 명령어, 스택에 리턴주소를 PUSH한 뒤 바로 뒤에 주소 값으로 점프한다.
call _printf -> _printf 함수를 호출한다.
add esp, 8 -> esp에 8을 더한다.
mov esp, ebp -> 현재 ebp값을 esp에 대입
3. POP : 스택 끝에 저장된 값을 가져온다. POP 후에는 스택이 4byte 감소, ESP 레지스터가 4byte 증가
ex) POP EBP --> 스택 끝의 값을 꺼내서 EBP에 저장