-
함수 호출 규약(Calling Convention)IT/리버싱 핵심원리 2017. 11. 24. 14:27
공부를 시작하기에 앞서 본 글은 '리버싱핵심원리', 이승원 저자, 인사이트 를 참고했음을 밝힙니다.
또한 공부하는 입장에서 정리를 목적으로 작성하였기때문에 틀린 정보가 있을수도 있다는 것을 알려드립니다.
1. 함수 호출 규약(Calling Convention)
- 함수를 호출할 때 파라미터를 어떤 식으로 전달하는가? 에 대한 일종의 약속이다.
- 함수 호출 후에 ESP(스택 포인터)를 어떻게 정리하는지에 대한 약속이다.
주요 함수 호출 규약을 설명하기 앞서서 앞으로 나오게 될 용어들을 알아보자.
Caller(호출자)
함수를 호출한 쪽
Callee(피호출자)
호출을 당한 함수
ex) main() 함수에서 printf() 함수를 호출했다면 Caller는 main()이고, Callee는 printf()가 되는 것이다.
주요 함수 호출 규약
1.1 cdecl
- 주로 C 언어에서 사용되는 방식이며, Caller에서 스택을 정리하는 특징을 가지고 있다.
cdecl.exe 예제 파일 소스코드
1.2 stdcall
- Win32 API에서 사용되며, Callee에서 스택을 정리하는 특징을 가지고 있다.
- stdcall 방식으로 컴파일하고 싶을 때는 '_stdcall' 키워드를 붙여주면 된다.
stdcall.exe 예제 파일 소스코드
1.3 fastcall
- 기본적으로 stdcall 방식과 같지만, 함수에 전달하는 파라미터 일부(2개까지)를 스택 메모리가 아닌 레지스터를 이용하여 전달한다는 것이 특징이다.
이해하기 위해서는 위의 예제 파일을 다운로드 받아서 실습해보기 바란다.
OllyDbg를 이용해 한줄 한줄 보면 이해가 될 것이다.
도움이 되었다면 아래
공감 버튼 한번씩 눌러주세요.^^
'IT > 리버싱 핵심원리' 카테고리의 다른 글
PE 파일 구조 (2) - PE 헤더(DOS Header, DOS Stub) (2) 2017.11.29 PE 파일 구조 (1) - PE 기본구조, VA & RVA (0) 2017.11.28 스택 프레임(Stack Frame) 실습 - stackframe.exe (0) 2017.11.23 스택 프레임(Stack Frame) 에 대해 알아보자 (0) 2017.11.23 스택(Stack) 이란 무엇인가? (0) 2017.11.23 댓글