西北工业大学数据库实验报告
计算机系统基础实验课第二次实验报告
对二进制炸弹求解过程的详细描述
首先使用objdump命令对bomb程序进行反汇编,并将汇编代码输出到asm.txt中。
阶段一、字符串比较
打开asm.txt文件,搜索到phase_1函数,可以看到以下代码。
08048b33 :
8048b33: 83 ec 14 sub $0x14,%esp
8048b36: 68 7c a0 04 08 push $0x804a07c
8048b3b: ff 74 24 1c pushl 0x1c(%esp)
8048b3f: e8 3e 05 00 00 call 8049082
8048b44: 83 c4 10 add $0x10,%esp
8048b47: 85 c0 test %eax,%eax
8048b49: 74 05 je 8048b50
8048b4b: e8 29 06 00 00 call 8049179
8048b50: 83 c4 0c add $0xc,%esp
8048b53: c3 ret
可以看出,用户输入字串指针保存在0x1c(%esp),然后调用,待返回后,测试返回值,若equal则进入下一phase,否则,从可知该函数用于比较两函数的值,因此需要两个字串作为输入,上面代码中,pushl 0x1c(%esp)用于传递用户字串指针,则push $0x804a07c自然是传递比较字串的指针了。打开gdb,x/s 0x80497c0, 可以直接查看到该指针指向的子符串: