완료됨
반환 주소가 rbp+0x8인 이유가 있나요?
rbp가 SFP인 것까지는 알겠는데 반환 주소가 0x8인 이유가 궁금합니다 SYSV 설명을 봐도 이 부분은 설명이 없는 것 같아서요...
#시스템_해킹
#공격기법
작성자 정보
답변
2
어떠한 함수를 호출하면 반환 주소가 스택에 들어가고
그 다음, 새로운 스택프레임을 할당하기 이전에 기존에 있던 스택프레임의 시작을 가리키던 rbp값 또한 스택에 들어가게 되죠
즉, 다시말해 어떠한 함수를 호출하게 되면 스택에는
0x0 기존의 rbp값
0x8 반환 주소
이렇게 들어가게 됩니다.
이 다음에 mov rbp, rsp를 통해 rbp는 0x0을 가리키게 됩니다
그래서 rbp + 0x8이 반환 주소인겁니다
혹시나 고수님들 제가 틀린점이 있다면 빠른 피드백 기다리고 있겠습니다!
movptr
공부벌레
스택은 자료 구조상으로는 쌓아 올리는 형태이지만 메모리에서는 깎아 내려가는 형태가 됩니다.
따라서 64비트를 기준으로 스택 순서를 살펴보면
BUF(지역변수) <- RBP - 지역변수 크기
SFP(이전 RBP) <- RBP
RET(반환 주소) <- RBP + 0x08
...
의 형태가 됩니다.