프로젝트공부아이디어
    • 2월
    • 1월
  • 27

    26. 2. 27.

  • 26

    26. 2. 26.

  • 25

    26. 2. 25.

  • 24

    26. 2. 24.

  • 23

    26. 2. 23.

  • 22

    26. 2. 22.

  • 13

    26. 2. 13.

  • 10

    26. 2. 10.

  • 9

    26. 2. 9.

  • 6

    26. 2. 6.

  • 2

    26. 2. 2.

로딩 중...

24

2026. 2. 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인 수를 곱한다(?)

왼쪽 화살표2325오른쪽 화살표