1. 背景介绍
从两年前就在看CSAPP断断续续,感觉收获不少但是最近偶尔翻开发现好多东西又忘了,之前基本没写过博客,上次写论文也是四五年前了,现在就趁着新冠疫情期间重温CSAPP顺便把一些收获沉淀下来,不足之处请网友批评指正。我的系统平台是Ubuntu18.04.1 X86-64,文中所有相关资源均可以在CSAPP网站上下载。
2. 言归正传
bombLab主要依托第三章Machine-Level Representation of Programs需要有汇编基础、熟悉gdb、了解objdump。该bomb分为6个阶段,我们分两部分介绍,第一部分主要针对如何快速通关,第二部分则侧重于分析与学习将整个过程梳理清楚,不感兴趣的可以只看第一部分。首先我们通过查看bomb.c可以看到整个程序的结构
#include <stdio.h>
#include <stdlib.h>
#include "support.h"
#include "phases.h"
FILE *infile;
int main(int argc, char *argv[])
{
char *input;
if (argc == 1) {
infile = stdin;
}
/* When run with one argument <file>, the bomb reads from <file>
* until EOF, and then switches to standard input. Thus, as you
* defuse each phase, you can add its defusing string to <file> and
* avoid having to retype it. */
else if (argc == 2) {
if (!(infile = fopen(argv[1], "r"))) {
printf("%s: Error: Couldn't open %s\n", argv[0