导航
BombLab Phase-3 & Phase-4 &Phase-5
BombLab phase-6 & secret_phase
Phase_1
1.观察源代码,看一下输入有哪些
通过观察,我们知道每个phase前面都有一个输入,并且为string类型,我们会将这个string传入phase_1中,所以栈帧中phase_1帧前面应该只有一个参数。
2.反汇编phase_1函数。
我们可以看到,在栈顶的顶8个字节存储了两个东西,第一个是将常量 $0x804a15c存入了(esp)+4的位置,第二个是将ebp+8存入了(esp),这第二个就是我们传入phase_1的参数,可以看出应该就是我们输入的字符串的地址,那么可以猜测第一个就是被比较的字符串的地址了。
3.画出phase_1的栈帧结构图
4.分析strings_not_equeal作用
从名字上来看,我们猜得到这个函数是对两个字符串比较是否相等,从调用时机来看——在调用前将字符串地址传入了栈顶,更加印证我们的猜想,当然这些都是猜测,我们还是具体来看下反汇编代码来分析一下。
查看strings_not_equeal函数汇编代码
我们可以看到,上面两个箭头分别跳到如下两个箭头的位置: