西北工业大学_计算机系统基础_实验报告_第2次

计算机系统基础实验课第二次实验报告

对二进制炸弹求解过程的详细描述

首先使用objdump命令对bomb程序进行反汇编,并将汇编代码输出到asm.txt中。

阶段一、字符串比较

打开asm.txt文件,搜索到phase_1函数,可以看到以下代码。

08048b33 :

8048b33: 83 ec 14 8048b36: 68 7c a0 04 08 8048b3b: ff 74 24 1c 8048b3f: e8 3e 05 00 00 8048b44: 83 c4 10 8048b47: 85 c0 8048b49: 74 05 8048b4b: e8 29 06 00 00 8048b50: 83 c4 0c 8048b53: c3

sub $0x14,%esp push $0x804a07c pushl 0x1c(%esp)

call 8049082 add $0x10,%esp test êx,êx

je 8048b50 call 8049179 add $0xc,%esp ret

可以看出,用户输入字串指针保存在0x1c(%esp),然后调用,待返回后,测试返回值,若equal则进入下一phase,否则,从可知该函数用于比较两函数的值,因此需要两个字串作为输入,上面代码中,pushl 0x1c(%esp)用于传递用户字串指针,则push $0x804a07c自然是传递比较字串的指针了。打开gdb,x/s 0x80497c0, 可以直接查看到该指针指向的子符串:

所以第一个炸弹的拆弹指令为:

I turned the moon into something I call a Death Star. 阶段二、循环

在asm.txt文件中可以找到phase_2函数代码如下:

08048b54 :

8048b54: 56 8048b55: 53 8048b56: 83 ec 2c 8048b59: 65 a1 14 00 00 00 8048b5f: 89 44 24 24 8048b63: 31 c0 8048b65: 8d 44 24 0c 8048b69: 50 8048b6a: ff 74 24 3c 8048b6e: e8 2b 06 00 00 8048b73: 83 c4 10 8048b76: 83 7c 24 04 01 8048b7b: 74 05 8048b7d: e8 f7 05 00 00 8048b82: 8d 5c 24 04 8048b86: 8d 74 24 18 8048b8a: 8b 03 8048b8c: 01 c0 8048b8e: 39 43 04 8048b91: 74 05 8048b93: e8 e1 05 00 00 8048b98: 83 c3 04 8048b9b: 39 f3 8048b9d: 75 eb 8048b9f: 8b 44 24 1c 8048ba3: 65 33 05 14 00 00 00 8048baa: 74 05

push %esi push ?x

sub $0x2c,%esp mov %gs:0x14,êx mov êx,0x24(%esp) xor êx,êx

lea 0xc(%esp),êx push êx

pushl 0x3c(%esp)

call 804919e add $0x10,%esp cmpl $0x1,0x4(%esp)

je 8048b82 call 8049179 lea 0x4(%esp),?x lea 0x18(%esp),%esi mov (?x),êx add êx,êx

cmp êx,0x4(?x)

je 8048b98 call 8049179 add $0x4,?x cmp %esi,?x

jne 8048b8a mov 0x1c(%esp),êx xor %gs:0x14,êx

je 8048bb1

8048bac: 8048bb1: 8048bb4: 8048bb5: 8048bb6: e8 df fb ff ff call 8048790 <__stack_chk_fail@plt> 83 c4 24 add $0x24,%esp 5b pop ?x 5e pop %esi c3 ret

根据call 804919e 可以推测题目要求是输入六个数字。又根据

cmpl $0x1,0x4(%esp)可以推断,输入的第一个数字是1;jne 8048b8a 可以知道程序是一个循环。add êx,êx和cmp êx,0x4(?x)可以明白,每次循环的答案是上一个答案的2倍,所以可以推测答案序列为: 1 2 4 8 16 32

测试发现结果正确。

阶段三、条件/分支 Phase_3代码如下: 08048bb7 :

8048bb7: 83 ec 28 sub $0x28,%esp 8048bba: 65 a1 14 00 00 00 mov %gs:0x14,êx 8048bc0: 89 44 24 18 mov êx,0x18(%esp) 8048bc4: 31 c0 xor êx,êx

8048bc6: 8d 44 24 14 lea 0x14(%esp),êx 8048bca: 50 push êx

8048bcb: 8d 44 24 13 lea 0x13(%esp),êx 8048bcf: 50 push êx

8048bd0: 8d 44 24 18 lea 0x18(%esp),êx 8048bd4: 50 push êx

8048bd5: 68 da a0 04 08 push $0x804a0da 8048bda: ff 74 24 3c pushl 0x3c(%esp)

8048bde: e8 2d fc ff ff call 8048810 <__isoc99_sscanf@plt> 8048be3: 83 c4 20 add $0x20,%esp 8048be6: 83 f8 02 cmp $0x2,êx

8048be9: 7f 05 jg 8048bf0 8048beb: e8 89 05 00 00 call 8049179 8048bf0: 83 7c 24 04 07 cmpl $0x7,0x4(%esp)

8048bf5: 0f 87 fc 00 00 00 ja 8048cf7 8048bfb: 8b 44 24 04 mov 0x4(%esp),êx

8048bff: ff 24 85 ec a0 04 08 jmp *0x804a0ec(,êx,4)

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4