함수 호출 규약(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 |