BombLab
在大一下学期的学习中,接触到了CSAPP这本书,在学习完之后,对第三章的汇编语言很感兴趣,加之有高中同学在做BombLab,与他一起做到了第四个。大二时才想起要写日志,再重新熟悉了一遍BombLab后,由于时间问题,只写完了前四个,后两个经过观察,发现第五个还是有机可循,第六个真的看的我一头雾水。在此,就谈谈已经写完的四个phase吧。(听说还有隐藏的phase,等以后有时间了再一探究竟)
BombLab简介
这是CSAPP第三章的配套实验,在CSAPP官网的README中我们能看到对这个实验的基本介绍,利用万能的谷歌翻译,介绍如下:
即该实验有六个phase,每一个phase需要输入一个字符串,如果输入错误,就会打印BOOM!!
解决方法也写在了README中:
简言之就是使用gdb调试打断点,获取隐藏起来的字符串答案,至于README其他的部分,我们就不必再作了解了,点击官网中的Self-Study Handout即可下载,这里给出CSAPP官网网址:CSAPP官网
下载解压之后,使用Viusal Studio Code打开,整个文件夹是这样的:
除去bomb.s,这就是文件夹的全部内容了
bomb.c是一个C语言源文件,只有main函数,它介绍了程序的大概执行顺序
bomb是一个二进制的可执行文件,通过执行它,输入我们的答案以验证是否正确
实验前的准备
- Linux系统环境
如Ubuntu,CentOS等 - 简单的Linux命令使用
如tar,cd等 - objdump反汇编工具的使用
虽说是需要使用反汇编工具,但也只是简单的使用这一条命令:
objdump -d [filename] - gdb调试工具的使用
这是需要重点掌握的技术,在本实验中,具体用到的命令有:
打断点:break [line-number]
清除断点:clear [line-number]
显示断点信息:info break
运行:run
显示数据:print
总之,gdb是非常强大的调试工具,可以使用man命令多多学习gdb的使用,利用重定向我们可以很快得到一份gdb的文档:
man gdb > gdb.txt
这里提供一份gdb的使用手册:gdb cheat sheet
拆弹之前
工欲善其事,必先利其器。首先我们要做的就是选择一个好的的阅读代码的工具,这里选择的是VSCode,它本来是一个文本编辑软件,得益于它庞大的插件数量,它可以被打造为一个全能的IDE。VSCode提供Windows,Linux,MacOS版本,甚至于ARM平台都有它的身影。
下载安装完毕后,装上汇编支持,便可以着手阅读代码了。
首先是bomb.c的源文件:
/* Hmm... Six phases must be more secure than one phase! */
input = read_line(); /* Get input */
phase_1(input); /* Run the phase */