네른

Calling Convention 본문

강의 정리/드림핵 정리

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를 더함(스택 정리)

'강의 정리 > 드림핵 정리' 카테고리의 다른 글

Stack Canary  (0) 2022.02.17
Stack Buffer Overflow  (0) 2022.02.15
pwntools API 정리  (0) 2022.02.11
orw shellcode  (0) 2022.02.11
2. FSB - Format String Bug / Double Free / Use After Free  (0) 2021.02.24
Comments