CSAPP:BOMB LAB

Phase 1

objdump -d bomb > bomb.s

先将bomb反汇编并输出到bomb.s,-d参数为全部反汇编,还有一个-t参数可以输出程序的符号表,不过我不知道这个符号表有什么用。
分析main函数的代码
CSAPP:BOMB LAB
结合bomb.c函数
CSAPP:BOMB LAB
我们能比较容易看出main函数前面的汇编代码主要是做一些初始化和调用输入等功能,不是重点,我们直接关注phase_1开始我们的第一个小实验
CSAPP:BOMB LAB
第一行和最后一行是调整栈指针指向位置,接下来看下面 这里调用了一个 string_not_equal 函数,从函数名就可以发现这个函数肯定是判断字符串是否相等的,感兴趣有时间的同学可以去看这个函数的汇编码。
在调用完这个函数之后,程序检查了返回值是否为0,如果为0则跳转不爆炸。那么我们看是哪两个字符串在比较:
%esi和%edi是头两个参数寄存器,我们看看里面放了什么,%esi中放入了内存地址 0x402400 内的字符串,我们打印看看是什么
CSAPP:BOMB LAB
答案很明显了,我们再看看%edi里面放了什么
CSAPP:BOMB LAB
把read_line的返回值放入%edi中,很明显就是我们的输入字符串。
Phase1的答案即为地址0x402400储存的字符串。

上一篇:CSAPP读前读后感:关于技术成长的一些思考


下一篇:CSAPP - Ch 2 - 信息的表示和处理