rsp: 스택 포인터 레지스터.rbp: 베이스 포인터 레지스터.rip: 명령어 포인터 레지스터.push: 값을 스택에 추가하고 rsp 감소.pop: 값을 스택에서 제거하고 rsp 증가.rax 레지스터에 반환값을 설정하고, rsp와 rbp를 복구.mov rsp, rbppop rbpleaveret인자 전달: 함수 호출 시 인자를 레지스터를 통해 전달.
규약 종류:
| 비트 | 규약 | 설명 |
|---|---|---|
| 32bit | cdecl | 기본 호출 규약, 인자를 오른쪽에서 왼쪽 순서로 push하고, 호출자가 스택을 정리 |
| 32bit | stdcall | 함수 내에서 스택 정리, ret 명령으로 스택 정리 |
| 64bit | fastcall | 인자를 레지스터에 전달 |
인자 전달 레지스터 (64bit):
| 인자 순서 | Linux | Windows |
|---|---|---|
| 1번째 | rdi | rcx |
| 2번째 | rsi | rdx |
| 3번째 | rdx | r8 |
| 4번째 | rcx | r9 |
| 5번째 | r8 | - |
| 6번째 | r9 | - |