호출(Call): 프로시저를 부르는 행위
반환(Return): 프로시저에서 돌아오는 것
프로시저를 호출할 때는.. 프로시저 실행 후 원래의 실행 흐름으로 돌아와야 한다.
call 다음의 명령어 주소(return address, 반환 주소)를 스택에 저장하고 프로시저로 rip를 이동
x64 어셈블리언어
call addr : addr에 위치한 프로시저 호출
[명령어 구성]
- push return_address
- jmp addr
leave: 스택프레임 정리
[명령어 구성]
- mov rsp, rbp
- pop rbp
# rsp에 rbp 값을 넣어주는건, 스택 어딘가에 있는 rsp를 현재 함수의 base 부분으로 부름.
# 그리고 pop rbp해서 함수의 스택 정리 + 아래에 있는.. 저장해놨던 원래 스택 프레임으로 돌아간다
ret: return address로 반환
[명령어 구성]
pop rip
# 저장해놨던 반환 주소를 pop해서 rip는 원래의 실행 흐름으로 돌아감.
'보안 > 리버싱' 카테고리의 다른 글
reversing.kr - Easy Keygen (0) | 2024.08.26 |
---|---|
reversing.kr - Easy ELF (0) | 2024.08.26 |
Dreamhack Quiz: x86 Assembly 2 (0) | 2022.07.10 |
86 Assembly: Essential Part(1) quiz (0) | 2022.07.08 |
#2 동적분석과 정적분석 (0) | 2022.07.01 |