24
함수 호출 규약
스택 프레임을 사용해 데이터를 read/write하는 함수들의 대화 방식을 함수 호출 규약이라 부른다. 함수가 인자를 어떻게 전달받고 반환하는지에 대해 매개변수의 위치, 매개변수의 정리 방식, 반환 값, 반환 주소 위치 등의 차이로 규약이 달라진다.
__cdecl

함수 호출 규약 중 하나로, C언어 API에서 함수를 호출하는 Caller에서 스택을 정리하는 방식. Caller인 main에서 stack pointer 제어를 전부 하고 있어 가변 인자를 사용하는 함수를 호출할 때 사용된다(가변 인자 크기를 Caller(main)에서만 알 수 있으므로).
__stdcall

Win32 API에서 주로 사용하며 호출당하는 Callee에서 스택을 정리하는 방식.
__cdecl과 흡사하지만 4번에서 stack pointer 정리하는 방식이 소폭 다르다. __cdecl의 경우 stack pointer를 Caller(main)에서 정리했다면 __stdcall은 Callee(func)에서 stack pointer를 정리한다.
__cdecl 대비 __stdcall의 장점
어셈블리에선 return과 return & sp = sp + 0x8이 각각 한 줄의 코드로 작성된다
__cdecl에선 return 코드 한 줄과 스택정리 코드 한 줄 총 2줄이 정의되나 __stdcall에선 한 줄의 코드로 줄일 수 있다
벡터의 회전
크기가 1인 수를 곱한다(?)