IT 그리고 정보보안/Knowledge base

함수 호출 규약 (Function Calling Convention)

plummmm 2021. 4. 17. 11:15
반응형

함수 호출 규약, Function Calling Convention 에는 여러가지 종류가 있다.

 

각 호출 규약들은 파라미터 받는 순서, 인자 정리 하는 방법 등

여러가지 차이점들이 존재한다.

한번 알아보도록 하겠음.

 

1. __cdecl

C, C++ 에서 default 값으로 사용되는 호출 규약이다. 기본 호출 규약.

함수 호출자(caller)가 인자를 정리한다. 인자 호출은 오른쪽에서 왼쪽 즉, 뒤에서 부터 앞으로

__cdecl 은 함수 인자의 갯수를 미리 알고 호출하기 때문에 가변 인자를 호출할 수 있다.

 

함수 정의 방식은 "_함수명"

인자 정리를 add를 이용하여 한다. 

 

 

2. __stdcall

Win32 API 함수들이 사용하는 호출 규약이다.

__cdecl과 다르게 함수 피호출자(callee)가 인자를 정리한다. (사실 cdecl빼고 다 callee가 정리한다.)

인자호출은 그대로 오른쪽->왼쪽

API 함수는 가변인자가 없으므로 인자 갯수를 미리 지정해준다.

 

함수 정의 방식은 "__stdcall 함수명"

 

인자 정리는 RETN 인자바이트수 로 callee가 정리함. 

 

그리고 __fastcall 과 __pascall 이 있다.

(파스칼은 회사가 망해서 더이상 안쓴다한다.)

 

이것들은 당장은 알 필요가 없어  나중에 필요하면 추가하여 정리하도록 하겠습니당~

 

반응형