함수 호출 규약
# 함수 호출 규약(Calling Convention)
- 함수(Caller)와 함수(Calle)간의 약속
- 파라메터를 어떤 방법으로 전달할 것인가?
- 사용한 파라메터를 누가 정리할 것인가?
- 규약의 종류는 _cdecl, _stdcall, _fastcall이 있음
# _cdecl
- CALLER 함수에서 스택을 정리
- 주로 C 라이브러리 함수에서 사용하는 규약
- 파라메터 정리 방법은 CALLEE에서 리턴 후에 ADD ESP, XX형태로 진행
# _stdcall
- CALLEE 함수에서 스택을 정리
- 주로 API 함수에서 사용하는 규약
- 파라메터 전달 매체 : Stack을 사용 (PUSH XX)
# _fastcall
- 함수 호출시 빠르게 호출하기 위해 사용하는 규약 (단 매개변수 2개 이하)
- 파라메터가 2개 이하인 경우 ECX와 EDX를 사용해서 속도가 빠름
- 파라메터가 3개 이상인 경우 stack을 사용함
- 파라메터 전달 매체 : ECX, EDX, Stack
- 파라메터 정리 : RETN XX