본문 바로가기

DreamHack: System Hacking/F Stage 5

Quiz: Calling Convention(퀴즈: 함수 호출 규약)

*Quiz 1, 2, 3, 4 풀이:

위의 소스코드를 보면 cdecl 호출 규약을 사용한다는 걸 알 수 있다. cdecl에서 인자는 역순으로 push 되므로,
(a)에는 push 0x3
(b)에는 push 0x2
(c)에는 push 0x1이 들어간다
(d)에서는 sum 함수의 반환값이 eax에 저장되고 push되어있던 세 인수를 정리해줘야 하므로, 12byte(int인수 세 개)만큼이 줄어들어야한다.(x86 아키텍처에서는 push될 때 0x4만큼씩의 공간이 할당된다)
따라서 (d)에는 add esp, 0xc가 들어간다.

 

*Quiz 5, 6, 7 풀이:

SYSV에서는 인자가 RDI, RSI, RDX, RCX, R8, R9 순으로 저장 된다. 또한 인자가 역순으로 저장된다.
따라서 (a)에는 mov rdx, 0x3
(b)에는 mov rsi, 0x2
(c)에는 mov rdi, 0x1이 들어가야한다