참고 자료:
아래 블로그를 보는 게 더 배울 게 많다.
굳이 내 자료를 보는 것보다 설명,그림이 잘 되어있어 시간을 아끼도록 하세요!
blog.kimtae.xyz/7
함수 호출 규약이란, 함수를 호출하는 방식에 대한 약속이다.
함수 호출 규약은 인자 전달 방법, 인자 전달 순서, Stack Frame을 정리하는 방법에 따라 그 종류를 구분한다.
Stack Frame은 함수의 호출 과정에서 호출되는 함수가 사용하기 위해 할당되는 Stack의 공간을 의미한다.
Stack Frame에는 함수를 호출할 때 입력한 전달 인자, 함수가 종료될 때 복귀할 명령어의 주소, 이전 Stack Frame EBP값을 저장하고, 지역변수를 저장하기 위한 공간을 할당한다.
EBP (Extended Base Pointer) 현재 스택 프레임의 주소를 담는 용도로 사용한다.
ESP (Extended Stack Pointer) 스택의 꼭대기 주소를 담는 용도로 사용한다.
여기서 다룰 건, cdecl과 stdcall을 다룬다.
1. cdecl
인자 전달 순서: 가장 오른쪽 인자부터 전달
인자 전달 매체: Stack을 사용
Stack Frame 정리 방법: 함수를 호출한 Caller가 인자를 정리
특징:
- C,C++에서의 표준 함수 호출 규약
- 가변인자를 사용할 수 있다.
2. stdcall
인자 전달 순서: 가장 오른쪽 인자부터 전달
인자 전달 매체: Stack을 사용
Stack Frame 정리 방법: 호출을 당한 Callee가 함수를 종료하면서 인자를 정리한다.
꼭! 위 참고한 블로그에서 어셈블리코드를 보면 이해가되니까 시간아깝다고 넘기지맙시다.
'개발 > C++' 카테고리의 다른 글
map ? unorderd_map ? (0) | 2021.08.09 |
---|---|
인라인 함수(inline function) (0) | 2021.03.17 |
코딩 컨벤션 맛보기 (0) | 2020.03.29 |
STL (Standard Template Library) (0) | 2019.10.02 |
C++과 C의 눈에 보이는 차이점 (0) | 2019.03.26 |