컬링 컨벤션 세가지(cdecl,stdcall,fastcall)
system/windows 2010. 7. 7. 00:00출처 : http://chaosura.egloos.com/4197783
# 함수 호출시에 사용한 매개변수를 정리하는 세가지 방법
- 함수가 종료 된 후에 호출시 사용한 매개변수를 저장한 스택 위치를 정리해 주는 방법으로 esp의 위치를 함수 호출이 일어나기 전의 위치를 옮겨 주는 것
1. __cdecl
- c/c++에서 디폴트로 사용
- 함수 호출 시 매개변수가 제일 우측에서 좌측 순서로 스택에 쌓인다
- 함수를 호출한 부모함수측에서 스택을 정리해 준다.([add esp, 숫자]의 형태로 표현)
2. __stdcall
- Windows API 에서 사용
- 함수 호출 시 매개변수가 제일 우측에서 좌측 순서로 스택에 쌓인다
- 호출당한 자함수측에서 스택을 정리 해준다. ([ret 숫자]의 형태로 표현)
3. __fastcall
- 매개변수가 두개 이하라면 ecx레지스터와 edx레지스터를 사용하며, 세개 이상이라면 가장 우측부터 스택에 쌓인다.
- 호출당한 자함수측에서 스택을 정리 해준다.
=> ecx레지스터와 edx레지스터를 매개변수 호출에 사용하기 때문에 스택에 ecx와 edx를 넣어 두고, 매개변수가 정리 된 후 스택에서 pop 시켜서 ecx와 edx를 복구 시켜준다.
# 함수 호출시에 사용한 매개변수를 정리하는 세가지 방법
- 함수가 종료 된 후에 호출시 사용한 매개변수를 저장한 스택 위치를 정리해 주는 방법으로 esp의 위치를 함수 호출이 일어나기 전의 위치를 옮겨 주는 것
1. __cdecl
- c/c++에서 디폴트로 사용
- 함수 호출 시 매개변수가 제일 우측에서 좌측 순서로 스택에 쌓인다
- 함수를 호출한 부모함수측에서 스택을 정리해 준다.([add esp, 숫자]의 형태로 표현)
2. __stdcall
- Windows API 에서 사용
- 함수 호출 시 매개변수가 제일 우측에서 좌측 순서로 스택에 쌓인다
- 호출당한 자함수측에서 스택을 정리 해준다. ([ret 숫자]의 형태로 표현)
3. __fastcall
- 매개변수가 두개 이하라면 ecx레지스터와 edx레지스터를 사용하며, 세개 이상이라면 가장 우측부터 스택에 쌓인다.
- 호출당한 자함수측에서 스택을 정리 해준다.
=> ecx레지스터와 edx레지스터를 매개변수 호출에 사용하기 때문에 스택에 ecx와 edx를 넣어 두고, 매개변수가 정리 된 후 스택에서 pop 시켜서 ecx와 edx를 복구 시켜준다.
'system > windows' 카테고리의 다른 글
Segmentation 시발점 찾다가 (0) | 2011.10.31 |
---|---|
110901 긁적긁적 (0) | 2011.09.01 |
dll injection 기초 (0) | 2010.09.03 |
win 명령어 (0) | 2010.08.05 |
메모리 관리와 함수 (0) | 2010.07.06 |