완료됨
반환 주소가 rbp+0x8인 이유가 있나요?

rbp가 SFP인 것까지는 알겠는데 반환 주소가 0x8인 이유가 궁금합니다 SYSV 설명을 봐도 이 부분은 설명이 없는 것 같아서요...

#시스템_해킹 #공격기법
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 2

어떠한 함수를 호출하면 반환 주소가 스택에 들어가고
그 다음, 새로운 스택프레임을 할당하기 이전에 기존에 있던 스택프레임의 시작을 가리키던 rbp값 또한 스택에 들어가게 되죠

즉, 다시말해 어떠한 함수를 호출하게 되면 스택에는
0x0 기존의 rbp값
0x8 반환 주소
이렇게 들어가게 됩니다.

이 다음에 mov rbp, rsp를 통해 rbp는 0x0을 가리키게 됩니다
그래서 rbp + 0x8이 반환 주소인겁니다

혹시나 고수님들 제가 틀린점이 있다면 빠른 피드백 기다리고 있겠습니다!

2022.04.30. 07:40
avatar
movptr
공부벌레

스택은 자료 구조상으로는 쌓아 올리는 형태이지만 메모리에서는 깎아 내려가는 형태가 됩니다.

따라서 64비트를 기준으로 스택 순서를 살펴보면

BUF(지역변수)     <- RBP - 지역변수 크기
SFP(이전 RBP)     <- RBP
RET(반환 주소)    <- RBP + 0x08
...

의 형태가 됩니다.

2022.05.06. 12:05