2020학년도 시스템프로그래밍 bomblab 보고서
- 최초 등록일
- 2020.11.12
- 최종 저작일
- 2020.09
- 20페이지/ 어도비 PDF
- 가격 3,000원
* 본 문서는 PDF문서형식으로 복사 및 편집이 불가합니다.
소개글
2020학년도 국립대 컴퓨터공학과 시스템프로그래밍 과목의 2번째 랩과제인 bomb lab의 보고서 자료입니다. 모든 Phase(1부터 Secret Phase까지)를 해결하는 과정을 포함하고 있습니다.
목차
1. Phase 1
2. Phase 2
3. Phase 3
4. Phase 4
5. Phase 5
6. Phase 6
7. Secret Phase
본문내용
read_six_numbers가 종료되고 나면, cmpl과 js 명령어를 실행하는데, 이를 해석해 보니 %rsp – 0x0 의 값이 음수이면 explode_bomb로 점프(js)하는 코드였다. ni 명령어를 사용하여 read_six_numbers 까지 실행시킨 다음, %rsp, 즉 스택의 top 값을 확인해 보았다.
스택의 top에 1이 들어 있었는데, 입력한 여섯 개 숫자 중 첫 번째 값인 것 같아 6개를 모두 확인해 보았더니 실제로 입력한 숫자가 저장되어 있었다.
하이라이트 되어 있는 코드부터 내려가면서 분석해 보면, 우선 %rsp-0x0 < 0, 즉 %rsp에 저장된 값이 음수이면 폭탄이 터진다는 것을 알 수 있다. 따라서 첫 번째 숫자는 0 이상이어야 한다.
첫 번째 숫자가 0 이상이면, 0x1을 %ebx에 옮기고 %rsp를 %rbp로 옮긴 다음, +63으로 점프하여 %ebx를 %eax에 옮긴다. 그다음, add 명령어를 사용하여 %rbp(=%rsp)에서 4*%rbx-4만큼 떨어진 주소의 값과 %eax를 더하여 %eax에 저장한 다음, %eax의 값이 %rbp(=%rsp)에서 4*rbx 만큼 떨어진 주소의 값과 같으면 <phase_2+53>코드를 실행한다.
해당 코드에서는 %rbx값을 1 증가시킨 다음, 그 값이 6이면 +82로 점프하여 explode_bomb코드를 지나가는데, 6이 아니면 바로 아래 줄 mov명령어를 실행하여 +63 코드부터 다시 실행하는 것을 볼 수 있다. 즉, %rbx값이 1부터 시작하여 6이 될 때 까지, +63~+73 코드를 폭탄이 터지는 코드로 넘어가지 않고 무사히 실행해야 한다.
그 조건은, 현재 %eax(=%ebx)값과, %rbp(=%rsp)에서 4*%rbx-4 만큼 떨어진 곳의 값을 더한 값이, %rbp(=%rsp)에서 4*%rbx 만큼 떨어진 주소의 값과 같아야 한다는 것이다. 따라서 폭탄이 터지지 않으려면 입력값이 다음을 만족해야 한다.
참고 자료
없음