《深入理解计算机系统》(CSAPP) -- BombLab

前言

《深入理解计算机系统》(CSAPP) 官网附带的BombLab,这是我完成的第二个lab,大部分是自己独立思考完成,也有一部分参考了网上的答案,记录一下。

正文

实事求是的说,这个lab比我写的上一个DataLab还要简单一些
只要有一定汇编,借助gdb去理解反编译出来的汇编代码就行
踏踏实实一步一步的逻辑推理(跟着gdb),可能会很“繁”,但不算很“难”
不像DataLab,有几题需要一些创造性的灵感,还要考虑题目所加的各种限制
(所以我就只给答案了,一步一步汇编代码跳来跳去的逻辑推理 思路冗长乏味,没有写的必要

准备工作

借助反编译工具objdump反编译bomb

	objdump -d bomb > bomb.asm

可以把每一题的答案逐行写到answer.txt里面
然后之间通过这条指令直接运行就行

	./bomb answer.txt

(对了,别忘了给bomb可执行权限

	chmod 777 bomb

题解

phase_1

Border relations with Canada have never been better.

phase_2

1 2 4 8 16 32

phase_3

8个答案:
0 207
1 311
2 707
3 256
4 389
5 206
6 682
7 327

phase_4

4个答案:
0 0
1 0
3 0
7 0

phase_5

低4位的数值是 9 15 14 5 6 7 的字符组成的字符串都可以
例如:
ionefg
IONEFG

phase_6

2个答案
20
22

secret_phase

感觉这个题网上好多教程都没讲到,稍微细讲一下吧
无论是通过c代码还是汇编代码都能看到,每个phase函数后面都会跟一个phase_defused函数

    phase_1(input);                  /* Run the phase               */
    phase_defused();                 /* Drat!  They figured it out! */
	400e3a:	e8 a1 00 00 00       	callq  400ee0 <phase_1>
	400e3f:	e8 80 07 00 00       	callq  4015c4 <phase_defused>

但是我们通过之前的分析已经可以发现,拆除每个炸弹的流程已经在每个单独的phase函数内部就走完了
那这个phase_defused函数是干嘛的呢?

	401630:	e8 0d fc ff ff       	callq  401242 <secret_phase>

经过推理可知,只要在phase_4的两个数字后面空格加上一个单词"DrEvil",就能在phase_6结束之后,运行到上面这行汇编代码,进入secret_phase函数

2个答案:
20
22

anwer.txt (不唯一)

Border relations with Canada have never been better.
1 2 4 8 16 32
3 256
7 0 DrEvil
IONEFG
4 3 2 1 6 5
20

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值