pseong

함수 호출 규약 본문

리버스

함수 호출 규약

pseong 2021. 12. 27. 04:03
  • __cdecl : 함수를 호출한 곳에서 스택을 보정한다. (ex: add esp 8, 함수 호출 전에 푸시해줬던 인자들 스택에서 제거)
  • __stdcall : 함수 내에서 리턴할 때 스택을 보정한다. (ex: ret 16, 함수 호출 전에 푸시해줬던 인자들 스택에서 제거)
  • __fastcall : 인자가 2개 이하일 경우 인자를 푸시하지 않고 edx와 ecx 레지스터를 이용해서 전달한다.
  • __thiscall : __stdcall과 동일하지만 ecx레지스터에 현재 객체 포인터를 전달하고 함수를 호출한다. (class내의 함수에서 사용된다.)

 

TIP) 함수 내의 시작 부분에서 레지스터를 푸시하는 행위는 그 레지스터를 함수 내 연산에 사용하기 위해 이전값을 잠시 저장하는 용도로 자주 해석된다.

TIP) void형이 아닌 함수내의 끝 부분에서는 항상 eax(리턴값) 을 설정해주는 코드가 존재한다.

'리버스' 카테고리의 다른 글

함수 호출 시 ESP, EBP 레지스터와 스택 프레임  (0) 2021.12.27
레지스터의 역할  (0) 2021.12.27
Comments