함수 호출 규약(Calling Convention)이란?

함수 호출 규약(Calling Convention)이란 호출자(Caller)와 피호출자(Callee) 간에 '함수를 호출할 때 전달되는 인자의 순서나 사용이 끝나고 나서의 스택 정리 등'에 대한 약속이라고 할 수 있습니다.


Winapi

Cdecl

StdCall

ThisCall

FastCall


CallingConvention Eunm에 정리된 설명

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
namespace System.Runtime.InteropServices {
    //
    // 요약:
    //     비관리 코드에서 구현된 메서드를 호출하는 데 필요한 호출 규칙을 지정합니다.
    [ComVisible(true)]
    public enum CallingConvention {
        //
        // 요약:
        //     이 멤버는 호출 규칙을 실제로 아니지만 대신 기본 플랫폼 호출 규칙을 사용 하 여. 예를 들어 Windows에서 기본값은 System.Runtime.InteropServices.CallingConvention.StdCall
        //     등에 Windows CE.NET System.Runtime.InteropServices.CallingConvention.Cdecl합니다.
        Winapi = 1,
        //
        // 요약:
        //     호출자가 스택을 정리 합니다. 이렇게 사용 함수를 호출 하면 varargs, 와 같은 가변 개수의 매개 변수를 허용 하는 방법에 대 한 사용
        //     하기에 적합 하면 Printf합니다.
        Cdecl = 2,
        //
        // 요약:
        //     호출 수신자가 스택을 정리 합니다. 이것이 플랫폼 관리 되지 않는 함수를 호출할 호출에 대 한 기본 규칙입니다.
        StdCall = 3,
        //
        // 요약:
        //     첫 번째 매개 변수는 this 포인터가 ECX 레지스터에 저장 됩니다. 다른 매개 변수는 스택에 푸시됩니다. 이 호출 규칙은 관리 되지 않는
        //     DLL에서 내보낸 클래스에서 메서드를 호출 하는 데 사용 됩니다.
        ThisCall = 4,
        //
        // 요약:
        //     이 호출 규칙을 사용 하는 것이 없습니다.
        FastCall = 5
    }
}
cs



프로젝트 설정에 c / c++ 고급에 보면 호츌 규칙이있다.

규칙은 3개가 있으며 함수 호출자와 피호출자 둘의 약속이며, 인자값을 스택에 넣는 순서나 사용 후 스택 정리 등에 대한 약속.

반응형

'Programming > Reverse Engineering' 카테고리의 다른 글

자바 디컴파일(Java Decompiler)  (0) 2018.03.21
ILSpy(Decompiler)  (0) 2017.02.05
abex' crackme (크랙 연습 예제)  (0) 2015.05.29
엔디언 표기법  (0) 2015.05.21
문자열 패치  (0) 2015.04.26
리버싱 Hello World  (0) 2015.04.25