어셈블리어 기초

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에 저장