티스토리 뷰

일반 IT 개발

Calling Convention 3가지 정리

삐니찌니 2009.11.05 18:07
# 함수 호출시에 사용한 매개변수를 정리하는 세가지 방법

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

1. __cdecl
  - c/c++에서 디폴트로 사용
  - 함수 호출 시 매개변수가 제일 우측에서 좌측 순서로 스택에 쌓인다
  - 함수를 호출한 부모함수측에서 스택을 정리해 준다.([add esp, 숫자]의 형태로 표현)

2. __stdcall
  - Windows API 에서 사용
  - 함수 호출 시 매개변수가 제일 우측에서 좌측 순서로 스택에 쌓인다
  - 호출당한 자함수측에서 스택을 정리 해준다. ([ret 숫자]의 형태로 표현)

3. __fastcall
  - 매개변수가 두개 이하라면 ecx레지스터와 edx레지스터를 사용하며, 세개 이상이라면 가장 우측부터 스택에 쌓인다.
  - 호출당한 자함수측에서 스택을 정리 해준다.
  => ecx레지스터와 edx레지스터를 매개변수 호출에 사용하기 때문에 스택에 ecx와 edx를 넣어 두고, 매개변수가 정리 된 후 스택에서 pop 시켜서 ecx와 edx를 복구 시켜준다.
저작자 표시
신고
댓글
댓글쓰기 폼