이제까진 그래도 괜찮았다. 근데, 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점 감점이라는..
[※ 주의 ※] 아래를 이해하지 않고 이 글을 볼 경우, 이해가 되지 않는 부분이 있을 수 있습니다. 1. [Docker] 도커(Docker) 딥 다이브 #1 지난 글에 간단하게 도커의 구조를 알아보았다. 이번에는 직접 도커를 사용해보며 도커에 대한 감을 익혀보자. 1. Push & Pull 도커는 이미지를 통해 컨테이너를 생성하고 실행한다. 이미지는 도커가 직접 운영하는 docker-hub에서 받을 수도 있고, 혹은 서드 파티 허브인 github packages, AWS ECR, GCP CR, local registry 등등 여러 곳에서 받을 수 있다. docker에서 이미지를 받기 위해선 다음 명령어를 사용한다. docker pull 만약 dockerhub가 아닌 레지스트리에서 다운받기 위해선 다음 ..
바야흐로 가상화의 시대이다. 여러 프로그램들을 가상 운영체제에 올려 가동을 시킨다. 이제는 VM을 포함한 한 대의 서버에서 여러 개의 서비스를 구동할 수 있는 시대가 온 것이다. 이러한 시대는 "사실 상 업계표준"인 도커(Docker)에서 시작되었으며, 현재 컨테이너 기술의 선두 주자라도 봐도 무방할 만큼 도커가 가상화 및 컨테이너 시장에 미친 영향은 어마어마하다. 그러나, 사실 도커가 어떤 시대정신에 맞추어 탄생하였는지, 이에 대한 맥락을 이해하면서 쓰는 것과 모른 채 쓰는 것은 매우 큰 차이가 있다고 생각한다. 이에 따라, 도커의 밑바닥부터 들어가보자. 파란 고래를 따라 바닥으로 들어가보자. 1. TCP/IP 5계층부터 살펴보자. 사실, 도커의 기술 80%는 네트워크 기술을 기반으로 두고 있다고 해도..
- Total
- Today
- Yesterday
- JS
- react
- C++
- docker
- bomblab
- effective async
- 수학
- Proactor
- GDSC
- Max
- Python
- 알고리즘
- 함수
- 백준
- 제어문
- C
- 시간복잡도
- 프로그래밍
- 헤더
- 구현
- MIN
- CSAPP
- Network
- 사칙연산
- BOJ
- equal
- 문자열
- BRONZE
- for
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |