본문 바로가기

Reversing/리버싱 공부

함수 호출 규약(Calling Convention)

함수 호출 규약(Calling Convention)


함수 호출 시 전달 되었던 파라미터들에 대하여

함수 호출이 끝난 후 스택을 정리하는 방법에 대한 약속( ESP를 정리하는 방법 )

 

caller : 함수를 호출한 쪽

callee : 호출 당한 함수

 

1. cdcel

- 주로 C언어에서 사용 됨

- caller에서 스택을 정리한다.

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

2. stdcall

- Win32 API에서 사용됨

- callee에서 스택을 정리

- c언어에서 stdcall 방식을 사용하고 싶을 때는 함수이름 앞에 '_stdcall' 옵션 추가

3. fastcall

- stdcall 방식과 기본적으로 같지만, 전달하는 파라미터의 일부(2개)를

 레지스터(ECX, EDX)를 이용해 전달한다. 나머지는 스택을 통해 전달

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

- 단점 : ECX, EDX에 대하여 백업이 필요하거나,

    함수에서 ECX, EDX를 다른 용도로 써야할 경우, 파라미터를 따로 저장해야함