http://carstart.tistory.com/98
ESP 와 EBP
[Public] 프로그래밍/C
함수를 호출 할때 어셈블리언어를 보면 함수의 크기보다 4 + 4 바이트가 더 붙는 것을 알 수 있다.
어셈으로 접근해보면 그게 무엇인지 알수가 있다. EBP에 대하여 알아 보자
ESP (Extended Stack Pointer)
- 현재 스택의 가장 위에 들어있는 데이터를 가리키고 있는 포인터
- Intel CPU에서는 스택이 거꾸로(리틀엔디언) 자라므로 데이터가 하나 PUSH 될때마다 ESP 값은 감소
- ESP는 다음 번 DATA를 Push 할 위치가 아니라 다음에 POP 했을 때 뽑아낼 데이터의 위치를 가리 킴
EBP (Extended Base Pointer)
- 현재 스택에 가장 바닥을 가리키는 포인터
- 새로운 함수가 호출될 때마다 EBP 레지스터 값이 지금까지 사용했던 스택 꼭대기의 위에 위치하게 되고
새로운 Stack이 시작
- 따라서 EBP는 새로운 함수가 호출이거나 현재 실행중인 함수가 종료되어 리턴될 때마다 값이 달라짐
ex) 어셈 예
push ebp - 이전 스택의 Base 주소를 저장
mov ebp, esp - 현재 스택의 꼭대기를 새로운 스택의 base설정 (새로운 스택 시작)
반응형
'운영체제 & 병렬처리 > 시스템프로그래밍' 카테고리의 다른 글
예외 처리 - 최후 에러코드, GetLastError, __try __catch, 내재 함수, GetExceptionCode, GetExceptionInformation ,종료 핸들러, __try __except __finally (0) | 2012.12.26 |
---|---|
구조적 예외 처리 - Structured Exception Handling(SEH) (0) | 2012.12.25 |
Shared Lock(공유 잠금), Exclusive Lock(독점 잠금) (0) | 2012.12.14 |
메모리 컨트롤 (0) | 2012.11.01 |
표준 검색 경로 (0) | 2012.11.01 |