1. Overview
<shell />(gdb) disas phase_5
phase_5 함수의 구성을 살펴보자.
2. Defusing phase 5
입력한 숫자 x y. x는 (%rsp), y는 0x4(%rsp)에 저장
test input : 2 3
rax는 x & 0xf. 0xf면 터짐
rdx에 eax 옮기고
eax에 rdi array에서 4 * rdx 위치의 값 넣는다. 14 -> 6 -> 15
esi에 r8 value에서 4 * rdx 위치의 값 더한다. esi는 0에서 시작 8 + 43 + 35 = 86
eax가 0xf가 될때까지 반복. 반복 횟수는 ecx = 3
0x555555556d60 rdi
0x555555556d60 <array.3429>: 10 2 14 7
0x555555556d70 <array.3429+16>: 8 12 15 11
0x555555556d80 <array.3429+32>: 0 4 1 13
0x555555556d90 <array.3429+48>: 3 9 6 5
0x555555556da0 r8
0x555555556da0 <value.3430>: 18 31 8 41
0x555555556db0 <value.3430+16>: 28 19 35 40
0x555555556dc0 <value.3430+32>: 37 27 61 4
0x555555556dd0 <value.3430+48>: 7 21 43 32
stack 가장 앞에 0xf 옮김
ecx가 5여야함 10 -> 2 -> 14 -> 6 -> 15 따라서 x & 0xf == 10
y와 esi 같아야함 61 + 31 + 8 + 43 + 35 = 178
10 178 입력하면 clear
'Study > CS' 카테고리의 다른 글
Lab2: Bomblab (secret phase) (1) | 2023.10.08 |
---|---|
Lab2: Bomblab (phase 6) (1) | 2023.10.08 |
Lab2: Bomblab (phase 4) (0) | 2023.10.08 |
Lab2: Bomblab (phase 3) (1) | 2023.10.08 |
Lab2: Bomblab (phase 2) (0) | 2023.10.08 |