다른 phase와 다르게, phase 5는 조금 특별하다. 왜 그런지는 문제와 함께 살펴보자. 하던대로, phase_5의 함수부터 분해하여보자! 0000000000401062 : 401062:53 push %rbx 401063:48 83 ec 20 sub $0x20,%rsp 401067:48 89 fb mov %rdi,%rbx 40106a:64 48 8b 04 25 28 00 mov %fs:0x28,%rax 401071:00 00 401073:48 89 44 24 18 mov %rax,0x18(%rsp) 401078:31 c0 xor %eax,%eax 40107a:e8 9c 02 00 00 callq 40131b 40107f:83 f8 06 cmp $0x6,%eax 401082:74 4e je 4010d..
이제까진 그래도 괜찮았다. 근데, phase 4부터는 난이도가 조금 어려워진다. 사실 꼼수는 많이 있지만, 정확히 알고가기에는어려운 부분이 많이 있었다. 각설은 여기까지만 하고, 일단 하던대로 함수 phase_4부터 분해하여보자. 000000000040100c : 40100c:48 83 ec 18 sub $0x18,%rsp 401010:48 8d 4c 24 0c lea 0xc(%rsp),%rcx 401015:48 8d 54 24 08 lea 0x8(%rsp),%rdx 40101a:be cf 25 40 00 mov $0x4025cf,%esi 40101f:b8 00 00 00 00 mov $0x0,%eax 401024:e8 c7 fb ff ff callq 400bf0 401029:83 f8 02 cmp $0..
세 번째 phase를 살펴보자. 가보자 가보자! phase_3 함수를 어셈블리어로 추출하여보자. 0000000000400f43 : 400f43:48 83 ec 18 sub $0x18,%rsp 400f47:48 8d 4c 24 0c lea 0xc(%rsp),%rcx 400f4c:48 8d 54 24 08 lea 0x8(%rsp),%rdx 400f51:be cf 25 40 00 mov $0x4025cf,%esi 400f56:b8 00 00 00 00 mov $0x0,%eax 400f5b:e8 90 fc ff ff call 400bf0 400f60:83 f8 01 cmp $0x1,%eax 400f63:7f 05 jg 400f6a 400f65:e8 d0 04 00 00 call 40143a 400f6a:83 7..
두 번째 phase를 살펴보자. 일단, phase_2를 "(gdb) $ disas phase_2" 명령어로 어셈블리어를 추출하여보자. 0000000000400efc : 400efc:55 push %rbp 400efd:53 push %rbx 400efe:48 83 ec 28 sub $0x28,%rsp 400f02:48 89 e6 mov %rsp,%rsi 400f05:e8 52 05 00 00 call 40145c 400f0a:83 3c 24 01 cmpl $0x1,(%rsp) 400f0e:74 20 je 400f30 400f10:e8 25 05 00 00 call 40143a 400f15:eb 19 jmp 400f30 400f17:8b 43 fc mov -0x4(%rbx),%eax 400f1a:01 c0 ..
CSAPP 랩의 두 번째 실습은 bomb lab이다. "폭탄 랩"이라는 무시무시한 이름을 달고 있고, 실제 난이도도 무시무시하게 어렵다. 왜냐면 object code를 리버싱하여, 각 레지스터에 담긴 데이터를 확인한 다음, 각 레지스터에 알맞은 값이 있도록 해야하기 때문이다. 이 랩의 목적은 binary 파일인 "bomb"을 해제하는 것이다. 정확히 말하면, 각 함수에 대하여 알맞은 input을 넣어주어야 하며, 알맞은 input은 어셈블리어를 분석하여 알 수 있다. 이번 실습의 특이한 점으로는 실수를 허용하지 않는다는 것이다. 만약 잘못된 input을 넣을 경우, "폭탄이 터진다". 실시간으로 폭탄이 터지는 횟수를 세며, 만약 폭탄이 터질 경우 0.5점이 감점된다. 즉 2번 터뜨릴때마다 1점 감점이라는..
- Total
- Today
- Yesterday
- 알고리즘
- Python
- Network
- effective async
- docker
- GDSC
- 문자열
- react
- C++
- BRONZE
- 구현
- 헤더
- bomblab
- 백준
- Max
- 수학
- equal
- 프로그래밍
- 사칙연산
- C
- CSAPP
- 시간복잡도
- JS
- Proactor
- for
- 제어문
- 함수
- MIN
- BOJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |