본문 바로가기

00./02. Assembly

컬링 컨베이션 세가지(cdecl, stdcall, fastcall)

# 함수 호출시에 사용한 매개변수를 정리하는 세가지 방법 


- 함수가 종료 된 후에 호출시 사용한 매개변수를 저장한 스택 위치를 정리해 주는 방법으로 esp의

위치를 함수 호출이 일어나기 전의 위치를 옮겨 주는 것


1. __cdecl

  - c/c++에서 디폴트로 사용

  - 함수 호출 시 매개변수가 제일 우측에서 좌측 순서로 스택에 쌓인다

  - 함수를 호출한 부모함수측에서 스택을 정리해 준다.([add esp, 숫자]의 형태로 표현)


2. __stdcall

  - Windows API 에서 사용

  - 함수 호출 시 매개변수가 제일 우측에서 좌측 순서로 스택에 쌓인다

  - 호출당한 자함수측에서 스택을 정리 해준다. ([ret 숫자]의 형태로 표현) 

 

3. __fastcall

  - 매개변수가 두개 이하라면 ecx레지스터와 edx레지스터를 사용하며, 세개 이상이라면 가장 우측부터 스택에 쌓인다.

  - 호출당한 자함수측에서 스택을 정리 해준다.

  => ecx레지스터와 edx레지스터를 매개변수 호출에 사용하기 때문에 스택에 ecx와 edx를 넣어 두고, 매개변수가 정리 된 후 스택에서 pop 시켜서 ecx와 edx를 복구 시켜준다.



# 어셈블리 코드



# 소스 코드