나의 기록, 현진록

[Reversing] 함수 호출 규약(Calling Convention) 본문

-Computer Theory

[Reversing] 함수 호출 규약(Calling Convention)

guswlsdk 2017. 9. 10. 17:27
반응형

함수 호출 규약이란?

  • 함수를 호출하는 방식에 대한 약속
  • 인자를 전달하는 방식과 함수 종료 시 스택 공간을 정리하는 방법에 따라 분류한다.

cdecl

인자 전달 순서 

<-- 

인자 전달 매체 

Stack 

Stack Frame 정리 방법 

Caller 

 C/C++에서의 표준 함수 호출 규약, Caller가 인자를 정리하는 규약이므로, 가변인자를 사용할 수 있다.



stdcall

 인자 전달 순서

<-- 

 인자 전달 매체

Stack 

 Stack Frame 정리 방법

Callee 

Win32 API, Visual Basic에서 사용하는 표준 함수 호출 규약, 코드가 간결하나 가변인자를 사용할 수 없다.



fastcall


인자 전달 순서 

<-- 

인자 전달 매체 

ECX, EDX, Stack 순서, 보통 두 개의 인자만 사용

Stack Frame 정리 방법 

Callee 

Delphi 개발 툴의 기본 규약이다. 인자 전달에 레지스터를 사용하므로, 속도가 빠른 장점이 있다. 인자가 3개 이상이면 Stack을 함께 사용해 인자를 전달한다.


반응형