[03] 어셈블리어 :: BOF
* EIP - main() 함수의 시작점을 가리킴
* ESP - 스택의 맨 꼭대기를 가리킴 (PUSH & POP명령)
* ebp (base pointer) - 저장하는 이유; 이전에 수행하던 함수의 데이터를 보존하기 위해
=> 함수가 시작될 때 stack pointer와 base pointer를 새로 지정 - 함수 프롤로그 과정
1. push %ebp
ebp를 스택에 저장한다.
2. mov %esp, %ebp
esp 값을 ebp에 복사한다.
(함수의 base pointer와 stack pointer가 같은 지점을 가리킨다)
3. sub $0x8, %esp
esp에서 0x8을 뺀다.
(스택을 8바이트 확장한다)
4. and $0xfffffff0, %esp
esp와 11111111 11111111 11111111 11110000을 AND 연산한다.
5. push $0x03
스택에 0x03을 넣는다.
6. call 0x80482f4
0x80482f4의 위치에 있는 명령을 수행한다.
* call이 발생하면, return 주소를 저장하듯 스택에 logical address가 저장된다.
함수 프롤로그 과정
새로운 스택의 시작
push %ebp -> 이전 스택의 base 주소 저장
mov %esp, %ebp -> 현재 스택의 꼭대기를 새로운 스택의 base 설정
leave
함수 프롤로그 작업을 되돌린다
mov %ebp, %esp
pop %ebp
를 진행하게 된다.
(1) stack pointer를 이전의 base pointer로 잡아 확장했던 스택 공간을 없앰
(2) push에서 저장해두었던 이전 함수의 base pointer를 복원
출처;
달고나 bof pdf
우리 학과 교수님 S2