헷갈려서 정리해본다.
push rbp 를 하게 되면 rsp 가 -0x8 이 되고 메모리에 rbp 값이 들어간다.
pop rbp 를 하게 되면 rsp 메모리 값이 rbp 에 저장되고 rsp 가 +0x8 이 된다.
함수 프롤로그
얼마나 사용할껀지 정해놓고 시작한다. 아래는 초기값 이다.

push rbp 한 결과다. ( rsp 가 -0x8 이 되고 메모리에 rbp 값이 들어간다 )

mov rbp, rsp 한 결과다.

sub rsp, 0x90 한 결과다.

main 함수 프롤로그는 0x90 만큼 스택을 확보하고 시작하는걸 알 수 있다.
함수 에필로그
leave 연산자는 mov rsp, rbp; pop rbp 를 수행한다. 아래는 초기값 이다.

leave 한 결과다.

step1. mov rsp, rbp

step2. pop rbp ( rsp 메모리 값이 rbp 에 저장되고 rsp 가 +0x8 이 된다 )

ret 한 결과다. (pop rip)

1. rip : 0x7ffff7c2a1ca (rsp : 0x7fffffffe2c8 → 0x7ffff7c2a1ca)
2. rsp : 0x7fffffffe2d0 (rsp : rsp(0x7fffffffe2c8) + 0x8)
결론
함수 프롤로그 전 rbp : 0x7fffffffe360
함수 에필로그 후 rbp : 0x7fffffffe360
서로 동일하다.
'Pwnable' 카테고리의 다른 글
| pwndbg gdb.attach(p) (0) | 2025.09.29 |
|---|---|
| pwndbg 명령어 정리 (0) | 2025.09.27 |