완료됨
call,push 질문

[Register]
rip = 0x400000
rsp = 0x7fffffffc400
[Stack]
0x7fffffffc3f8 | 0x0
0x7fffffffc400 | 0x0 <= rsp
[Code]
0x400000 | call 0x401000 <= rip
0x400005 | mov esi, eax
...
0x401000 | push rbp

에서 궁금한 것이 있습니다.
1)rsp가 스택의 탑을 가리키는 것이라 알고있는데 왜 저기서는 탑(0x7fffffffc3f8)을 안 가리키는지
2)push만 했는데 왜 rsp가 가리키는 것이 달라지는지, 왜 push인데 쌓이는 데이터가 없는지
3)저기서의 mov는 왜 쓴건지
이해를 못하겠네요... 도와주시면 감사하겠습니다 제발...

#리버싱 #배경지식
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 3
avatar
wyv3rn
무플 방지 위원회장

몇페이지를 말씀하시는건지 모르겠지만...

1)rsp가 스택의 탑을 가리키는 것이라 알고있는데 왜 저기서는 탑(0x7fffffffc3f8)을 안 가리키는지
-> 단순히 설명을 위해 표현을 해놓아서 그런겁니다.
2)push만 했는데 왜 rsp가 가리키는 것이 달라지는지, 왜 push인데 쌓이는 데이터가 없는지
-> push는 말씀하신 것처럼 스택의 탑을 가리키고, push로 값이 쌓이기 때문에 rsp가 8이 작아집니다.
3)저기서의 mov는 왜 쓴건지
-> 마찬가지로 단순히 설명을 위한 표현입니다. 굳이 왜 쓰인건지는 모르셔도 됩니다.

2023.07.19. 16:17
누룽지
대표 업적 없음

https://learn.dreamhack.io/38#5 이 부분 왼쪽 call 파트에서(3페이지 왼쪽) push rbp를 했는데 push가 원래 스택에서 값을 위에 넣는 것 아닌가요? rbp를 push하는 게 무슨 의미인지 모르겠고 왜 push하고나서 그 위쪽 데이터(0x7fffffffc3f8)를 가리키는지... 제가 push에 대해 잘못알고 있는건가요?

2023.07.19. 23:57
avatar
wyv3rn
무플 방지 위원회장

push xxx -> xxx의 값을 스택의 가장 위에 넣고 rsp는 -8 (32비트에서는 -4)로 이동한다.
입니다.

2023.07.20. 06:56