한국으로/ARM
호출 규약 __cdecl 과 __stdcall의 차이점
영킴.
2018. 7. 21. 22:17
__cdecl (C declaration)
함수를 호출한 쪽(Caller)에서 인자를 제거하고 스택을 정리.
가변인자 사용 가능.
__stdcall (standard call)
호출된 쪽(Callee)에서 직접 스택을 정리.
가변인지 사용 불가능. 호출된 함수가 인자의 개수를 알 수 없어서 인자에 대한 스택정리에 오류있음.
__fastcall
호출된 쪽(Callee)에서 직접 스택을 정리.
공통적으로 인자는 우측부터 높은 주소가 전달된다.
ARM은 __cdecl과 __fastcall을 섞어쓴다.
그리고 OS가 호출하는 함수는 되도록이면 __stdcall을 쓰자.