기본 콘텐츠로 건너뛰기

8월, 2020의 게시물 표시

[C/C++] 함수 호출 규약 ( Calling Conventions)

본 페이지에서는 함수 호출 규약에 대하여 정리하고자 한다.  먼저 윈도우 프로그램의 정석 마이크로 소프트 문서 페이지의 개요를 이해하기 위해 번역하고, 좀더 구체적인 개념에 대해 정리한다. 마이크로 소프트 문서 번역 출처  -  https://docs.microsoft.com/en-us/cpp/cpp/calling-conventions?view=vs-2019 Calling Conventions Visual C/C++ 컴파일러는 내부와 외부 함수을 호출하기 위한 여러가지 다른 규약을 제공한다. 이 차이점을 이해하는 것은 구독자의 프로그램을 디버깅 할 수 있도록 도와주거나 어셈블리 언어 루틴을 포함하는 구독자의 코드를 링크할 수 있도록 도와준다. 이 주제에서 토픽들은 함수 호출 규약의 차이점을 설명한다, 아규먼트들이 어떻게 입력되고 반환값들은 함수에 의해 어떻게 반환되는지 등에 대한 것들. 토픽은 구독자가 자신의 프롤로그 코드와 에필로그 코드를 작성할 수 있게 하는 좀더 향상된 특성인 naked 함수 호출에 대해 설명한다. x64 프로세서를 위한 함수 호출 규약에 대한 정보는 여기 를 참조하라. # 이 세션의 토픽들 1) 아규먼트 입력과 네이밍 규약  ( __cdecl, __stdcall, __fastcall, and others ) 2) 함수 호출 예제: Function  Prototype and Call 3) 커스터머 프롤로그/에필로그 코드를 호출하는 naked 함수 사용하기 4) 플로팅 포인트 코플세서와 함수 호출 규약 5) 예전 함수 호출 규약 아규먼트 입력과 네이밍 규약 MS C++ 컴파일러는 구독자가 함수와 호출자 간의 아규먼트 입력과 반환값을 위한 규약을 정하도록 한다.  - 생략( -  구독자는 ESI, EDI, EBX 레지스터에 저장하고 복구하기 위한 프롤로그와 에필로그 코드를 생성한다.  구독자 함수의 프롤로크와 에필로그 코드를 정의하는 방법은 Naked Function Cal...