본문 바로가기

System Programming/CSAPP Lab

(11)
[Bomb Lab] Phase 2, assembly cmp/jmp, 분기, 반복문 phase_2() 함수의 assembly 확인 disassembler로 phase_2() 함수의 assembly 코드를 출력해보면 다음과 같다. 함수의 2번째 arg에 해당하는 rsi 레지스터에 스택 포인터 rsp 값을 넘겨준 뒤, read_six_numbers() 함수를 호출한다. 이 함수의 disassembler를 돌려보면 이 함수에 breakpoint를 찍고 프로그램을 실행시킨다. 이 때, phase 1은 풀었던 결과대로 정답을 바로 입력해주고, phase 2는 1 2 3 4 5 6이라는 임의의 6개 숫자를 입력한다. 함수의 1번째 arg인 rdi 레지스터가 가리키는 곳의 메모리 값을 찍어보면 입력했던 6개의 숫자가 들어있음을 확인할 수 있다. 스택 확인 read_six_numbers() 함수 호출..
[Bomb Lab] Phase 1, gdb 명령어, assembly code 변환, gdb 메모리 참조 지난 포스팅에서 Bomb Lab을 시작할 준비를 끝냈으므로, 이제 맨 첫 단계인 phase_1 함수부터 분석해보기로 한다. bomb.c 소스 코드를 보면 알 수 있는데, 이 프로그램은 총 phase 1부터 6까지 6개의 단계로 구성되어 있다. 하나의 단계를 해결하면 그 다음으로 넘어가는 식으로 이루어져 있다. 다시 gdb 디버거로 bomb 프로그램을 여는 것으로 시작한다. Assmebly 코드로 변환하기 disas (함수명) 을 입력하면 함수에 대한 assembly 코드 변환 결과를 보여준다. 먼저, main 함수에 대해 assmebly 코드를 보면, PC 값과 그에 해당하는 assembly 명령어가 출력된다. procedure call (함수 호출) 명령어의 경우, 호출하는 함수 이름과 함께 출력된다...
[Bomb Lab] 프로젝트 파일 다운로드 및 준비 과정 (GDB 설치) 프로젝트 파일 다운로드 프로젝트 파일은 아래 링크에서 다운로드 받을 수 있다. 프로젝트 다운로드 링크 : http://csapp.cs.cmu.edu/3e/labs.html CS:APP3e, Bryant and O'Hallaron Lab Assignments This page contains a complete set of turnkey labs for the CS:APP3e text. The labs all share some common features. Each lab is distributed in a self-contained tar file. You will need a CS:APP account to download the code. To untar foo.tar, t csapp.cs.cmu...