함수 호출 규약(cdecl, stdcall, fastcall)
1. cdecl
위 cdecl.exe를 디버깅 해보자
add()에서 스택 프레임 구조를 찾아볼 수 있는데, main()을 보면 add()가 ret 된 후 복귀주소로 돌아와 add esp, 8 을 실행하는 것을 볼 수 있는데, 이는 스택 프레임의 구조를 caller(호출자)가 정리하는 모습이다
cdecl - caller가 스택 프레임을 정리
2. stdcall
위 stdcall.exe를 디버깅 해보자
stdcall은 caller가 아닌 callee(피호출자)가 매개변수의 크기만큼 스택 프레임을 정리하는 모습을 보여준다
ret 8은 ret 실행 후 esp에 8을 더한다는 뜻이며, stdcall은 WinAPI에서 많이 사용된다
stdcall - callee가 스택 프레임을 정리
3. fastcall
stdcall과 방식은 같지만, 함수에 전달하는 파라미터 일부를 스택이 아닌 레지스터를 이용하여 전달한다는 특징이 있는데, 어떤 함수의 파라미터가 4개라면, 앞의 두 개의 파라미터는 각각 ecx, edx 파라미터를 이용하여 전달한다
'Reversing' 카테고리의 다른 글
API Hooking (1) | 2025.02.06 |
---|---|
PE File Format (0) | 2024.09.23 |
Abex' crackme #2 Analysis (0) | 2024.09.20 |
Stack Frame (0) | 2024.09.13 |
Abex' crackme #1 Analysis (0) | 2024.09.12 |