My Study/System

Calling Conventions(콜링 컨벤션)

 콜링 컨벤션이란 내부 및 외부 함수를 호출하기 위한 규칙이다. 디버깅 할 때나 어셈블리어 코드를 링크 할 때 어떠한 방식으로 접근하는지에 대해서 알려준다.

 

콜링 컨벤션의 종류는 __cdecl __clrcall __stdcall __fastcall __thiscall __vectorcall  이렇게 6가지가 있다. 하지만 자주 보는 __cdecl, __stdcall, __fastcall 이렇게 3가지만 정리하겠다.


나머지는 이곳을 클릭하여 MSDN을 참조하세요.


1. __cdecl

Element

Implementation

Argument-passing order

인자 전달 순서

Right to left. 

오른쪽에서 왼쪽으로 스택을 불러온다.

Stack-maintenance responsibility

스택 정리

Calling function pops the arguments from the stack.

인자를 스택에서 꺼내온다.

Name-decoration convention

선언

Underscore character (_) is prefixed to names, except when __cdecl functions that use C linkage are exported.

함수 이름에 _ 문자를 추가하여 사용한다. __cdecl는 제외

Case-translation convention

대 소문자 변환

No case translation performed.

대소문자 변환 없음

<출처 : MSDN>


2. __stdcall


Element

Implementation

Argument-passing order

인자 전달 순서

Right to left.

오른쪽에서 왼쪽으로 스택을 불러온다.

Argument-passing convention

인자 패스 규칙

By value, unless a pointer or reference type is passed.

변수나 선언되지 않는 타입은 패스한다.

Stack-maintenance responsibility

스택 정리

Called function pops its own arguments from the stack.

인자를 스택에서 꺼내온다.

Name-decoration convention

선언

An underscore (_) is prefixed to the name. The name is followed by the at sign (@) followed by the number of bytes (in decimal) in the argument list. Therefore, the function declared as int func( int a, double b ) is decorated as follows: _func@12

함수 이름에 _ 문자를 추가하여 사용한다. 이름 뒤에 @ 가 붙고 그 뒤에 인자 목록의 바이트 수가 10진수로 로 이어진다. 

따라서 int func( int a, double b) 는 _func@12 와 같이 선언 된다.

Case-translation convention

대 소문자 변환

None

없음

<출처 : MSDN>


3. __fastcall

Element

Implementation

Argument-passing order

인자 전달 순서

The first two DWORD or smaller arguments that are found in the argument list from left to right are passed in ECX and EDX registers; all other arguments are passed on the stack from right to left

처음 두 DWORD 또는 더 작은 크기의 인자는 ECX와 EDX 레지스터로 전달하며, 나머지 인자는 오른쪽에서 왼쪽으로 스택을 불러온다.

Stack-maintenance responsibility

스택 정리

Called function pops the arguments from the stack.

인자를 스택에서 꺼내온다.


Name-decoration convention

선언

At sign (@) is prefixed to names; an at sign followed by the number of bytes (in decimal) in the parameter list is suffixed to names.

이름 앞에 @ 가 붙고 이름 뒤에도 @ 붙는다.그 뒤에 인자 목록의 바이트수가 10진수로 이어진다.

Case-translation convention

대 소문자 변환

No case translation performed.

대 소문자 변환 없음

<출처 : MSDN>


'My Study > System' 카테고리의 다른 글

DLL Injection (1) - 간단 기본 개념  (0) 2016.05.23
Memory : stack(스택)  (0) 2015.06.26
레지스터  (0) 2015.05.13
Handray  (0) 2015.03.25
Stack Corruption  (0) 2015.03.18
,

최근 댓글

최근 트랙백

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.