함수 호출 규약

728x90

요약

- cdecl

- fastcall

- stdcall

 

정의

"함수를 호출할 때 파라미터(인자)를 어떤 식으로 전달하는지에 대해 정해놓은 일종의 약속

 

용어 : caller -> 함수를 호출한 쪽, callee -> 함수 호출을 당한 쪽

 

cdecl

- 주로 C언어에서 사용되는 방식

- caller에서 스택을 정리한다. 예를들어 main이 A라는 함수를 호출했다면 main이 자신이 스택에 입력한 함수 파라미터를 직접 정리

- 장점 : 가변 길이 파라미터를 전달할 수 있다.

 

stdcall

- Win32 API에서 사용되는 방식

- callee가 스택을 정리함

- stdcall으로 컴파일 하고 싶을때는 _stdcall 키워드를 붙여주면됨. 

- 장점 : 코드의 크기가 작아진다.

 

fastcall

- 기본적으로 stdcall 방식과 같지만 함수에 전달되는 파라미터의 일부를 스택이 아닌 레지스터를 이용하여 전달

- 장점 : 좀 더 빠른 함수 호출이 가능

728x90

'Technique' 카테고리의 다른 글

Heap Fengshui  (0) 2022.01.13
Return To CSU(A.K.A RTC)  (0) 2022.01.06
pwntools - ret2dlresolve  (0) 2021.12.13
Return to dl resolve  (0) 2021.12.13
gdb로 C++ 바이너리 분석시 함수 깨질때  (0) 2021.12.02