관리 메뉴

HeeJ's

[03] 어셈블리어 :: BOF 본문

<Information Security>/<System>

[03] 어셈블리어 :: BOF

meow00 2020. 9. 10. 00:38

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

'<Information Security> > <System>' 카테고리의 다른 글

[6] File Integrity Operator  (0) 2022.01.24
[05] Byte Order :: BOF  (0) 2020.09.13
[04] Buffer Overflow의 이해 :: BOF  (0) 2020.09.10
[02] CPU 레지스터 구조 :: BOF  (0) 2020.08.30
[01] 메모리 구조 :: BOF  (0) 2020.08.29