강의 정리/드림핵 정리
Calling Convention
네른
2022. 2. 15. 17:03
컴파일러별로 함수 호출시 사용하는 규약이 다름
x86 : 레지스터 수가 적어 스택을 통해 인자를 전달
- cdecl
- stdcall
- fastcall
- thiscall
x86-64
- System V (SYSV)
- MS ABI : Windows Syscall에 사용됨
cdecl
- 인자 전달에 사용한 스택을 "호출자(Caller)"가 정리함
SYSV
- 인자를 레지스터에 담아 전달함 (RDI, RSI, RDX, RCX, R8, R9 순서대로 + 이후에는 스택)
- Caller가 스택을 정리함
- 반환값은 RAX에 담김
- push 하나당 rsp가 8씩 감소함을 생각하자(esp의 두배)
- callee가 종료되면 leave 명령어고 rbp를 꺼내고 ret 명령어로 rip를 되돌림
- 이후 caller가 사용된 rsp를 더함(스택 정리)