'00./02. Assembly'에 해당되는 글 1건

  1. 2013.06.27 컬링 컨베이션 세가지(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를 복구 시켜준다.



# 어셈블리 코드



# 소스 코드


저작자 표시 비영리 변경 금지
신고

'00. > 02. Assembly' 카테고리의 다른 글

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

카운터

Total : 85,369 / Today : 1 / Yesterday : 31
get rsstistory!