다른 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점 감점이라는..
미국에 악명 높은 시스템 프로그래밍 관련 실험이 있다. CS:APP(Computer Science:A Programmer's Perspective)라고, 미국 카네기 멜론 대학(CMU) 랩(과제) 시리즈라고 한다. 각 과제마다 매우 성격이 다르지만, 나중에 프로그래밍으로 밥 벌어먹고살아야 하는 사람이라면 한 번은 거치고 가야 한다는 말이 있을 정도로 전 세계적으로 인기가 많고, 또 그만큼 유명세도 높은 랩이다. 나의 전공수업 '마이크로프로세서'(라 하고 시스템프로그래밍 가르치는 수업)에서 이 시리즈의 과제를 진행하는데, 과제 제출 이후 CSAPP 시리즈를 연재하면서 이에 대한 복기 차원에서 포스팅을 진행할 예정이다. 첫 번째 CSAPP의 과제는 Data lab으로, 제한된 횟수의 제한된 비트 연산을 통해..
- Total
- Today
- Yesterday
- Max
- react
- 백준
- 함수
- GDSC
- 프로그래밍
- bomblab
- Proactor
- effective async
- 문자열
- for
- docker
- C++
- 사칙연산
- 알고리즘
- 구현
- C
- 수학
- equal
- CSAPP
- BRONZE
- 헤더
- Network
- MIN
- JS
- 제어문
- 시간복잡도
- Python
- 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 |