일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C알고리즘
- 항등함수
- 신경망파이썬
- FTZlevel10
- 보안
- 정보보안
- 백준알고리즘
- 활성화함수파이썬
- 신경망구현
- 달고나bof
- BOF
- 소프트맥스함수
- 딥러닝파이썬
- 파이썬신경망
- 버퍼오버플로우
- 신경망
- 밑바닥부터시작하는딥러닝
- 스트림암호
- 인공지능
- C언어 알고리즘
- C언어알고리즘
- 알고리즘
- c언어
- 머신러닝
- 파이썬
- BOJ
- 신경망 학습
- 딥러닝
- 8086CPU레지스터
- 백준
- Today
- Total
HeeJ's
[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
'<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 |