완료됨
어셈블리 call 질문

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

여기서 아무리 봐도 결과가 왜

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

이런식으로 나오는지 모르겠습니다...
code에 0x400000 | call 0x401000 이 실행되서
0x401000 | push rbp <= rip 여기로 온 것 까진 이해했는데
push rbp 다음부터 전혀 모르겠네요...
여기저기 찾아보니까 -8을 한다는데 왜 하는지도 모르겠습니다

제발 도와주세요...

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

콜이라는 명령어 자체가 그런 역할을 합니다.
즉, 콜로 진입한 함수가 종료될때 다시 돌아올 주소를 push 하는거죠.
push는 스택에 값을 집어넣는데, 값이 들어오니 rsp 즉 스택의 최 상위 위치가 -8 이 되는겁니다

2023.09.03. 17:06
avatar
wyv3rn
무플 방지 위원회장

넵 그렇습니다.pop은 반대로 +8이 됩니다.
esp는 이해하신 부분이 맞습니다

2023.09.03. 20:44
avatar
wyv3rn
무플 방지 위원회장

아니요 이미 콜을 빠져나온 후에 실행되는거라 400 위치에서 해당 함수는 작동합니다.
명령어가 스택과는 상관 없는 동작이긴 하지만요.

2023.09.03. 22:49
avatar
wyv3rn
무플 방지 위원회장

아마 push를 착각하신 것 같은데, 다시 한번 더 스택에 값을 넣는거라 rbp값이 스택에 쌓이고 rsp도 한번 더 -8이 됩니다.

2023.09.05. 15:23