[Dreamhack - System Hacking] STAGE 5 : Background: Calling Convention QUIZ

eunee22·2023년 8월 5일

Dreamhack/SystemHacking

목록 보기
11/12
// Name: callconv_quiz.c
// Compile: gcc -o callconv_quiz callconv_quiz.c -m32

int __attribute__((cdecl)) sum(int a1, int a2, int a3){
	return a1 + a2 + a3;
}
void main(){
	int total = 0;
	total = sum(1, 2, 3);
}
main:   
   0x080483ed <+0>:	push   ebp
   0x080483ee <+1>:	mov    ebp,esp
   0x080483f0 <+3>:	sub    esp,0x10
   0x080483f3 <+6>:	mov    DWORD PTR [ebp-0x4],0x0
   0x080483fa <+13>:	(a)
   0x080483fc <+15>:	(b)
   0x080483fe <+17>:	(c)
   0x08048400 <+19>:	call   0x80483db <sum>
   0x08048405 <+24>:	(d)
   0x08048408 <+27>:	mov    DWORD PTR [ebp-0x4],eax
   0x0804840b <+30>:	nop
   0x0804840c <+31>:	leave  
   0x0804840d <+32>:	ret

Q1. 아래 코드를 컴파일 했을 때, 컴파일된 어셈블리 코드 중 (a)에 들어갈 것으로 가장 적절할 것을 고르시오.

A. push 0x3

Q2. 아래 코드를 컴파일 했을 때, 컴파일된 어셈블리 코드 중 (b)에 들어갈 것으로 가장 적절할 것을 고르시오.

A. push 0x2

Q3. 아래 코드를 컴파일 했을 때, 컴파일된 어셈블리 코드 중 (c)에 들어갈 것으로 가장 적절할 것을 고르시오.

A. push 0x3

함수의 인자는 뒤에서 부터 push 된다.

Q4. 아래 코드를 컴파일 했을 때, 컴파일된 어셈블리 코드 중 (d)에 들어갈 것으로 가장 적절할 것을 고르시오.

A. add esp, 0xc

push를 3번 하였으므로 esp가 12byte 만큼 증가되어 있음

// Name: callconv_quiz2
// Compile: gcc -o callconv_quiz2 callconv_quiz2.c

int sum(int a1, int a2, int a3){
	return a1 + a2 + a3;
}
void main(){
	int total = 0;
	total = sum(1, 2, 3);
}
main:
   0x00000000004004f2 <+0>:	push   rbp
   0x00000000004004f3 <+1>:	mov    rbp,rsp
   0x00000000004004f6 <+4>:	sub    rsp,0x10
   0x00000000004004fa <+8>:	mov    DWORD PTR [rbp-0x4],0x0
   0x0000000000400501 <+15>:	(a)
   0x0000000000400506 <+20>:	(b)
   0x000000000040050b <+25>:	(c)
   0x0000000000400510 <+30>:	call   0x4004d6 <sum>
   0x0000000000400515 <+35>:	mov    DWORD PTR [rbp-0x4],eax
   0x0000000000400518 <+38>:	nop
   0x0000000000400519 <+39>:	leave  
   0x000000000040051a <+40>:	ret

Q5. SYSV를 적용하여 아래 코드를 컴파일 했을 때, 컴파일된 어셈블리 코드 중 (a)에 들어갈 것으로 가장 적절한 것을 고르시오.

A. mov edx, 0x3

Q6. SYSV를 적용하여 아래 코드를 컴파일 했을 때, 컴파일된 어셈블리 코드 중 (b)에 들어갈 것으로 가장 적절한 것을 고르시오.

A. mov esi, 0x2

Q7. SYSV를 적용하여 아래 코드를 컴파일 했을 때, 컴파일된 어셈블리 코드 중 (c)에 들어갈 것으로 가장 적절한 것을 고르시오.

A. mov edi, 0x1

인자가 총 3개이므로 순서대로 rdi, rsi, rdx에 들어간다. (sysv를 적용하면 rdi, rsi, rdx, rcx, r8, r9 stack 순서로 인자가 저장된다.)

profile
보안 공부하는 대학교 4학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글