西北工业大学计算机系统基础实验报告第2次.docx
《西北工业大学计算机系统基础实验报告第2次.docx》由会员分享,可在线阅读,更多相关《西北工业大学计算机系统基础实验报告第2次.docx(16页珍藏版)》请在冰豆网上搜索。
西北工业大学计算机系统基础实验报告第2次
计算机系统基础实验课第二次实验报告
对二进制炸弹求解过程的详细描述
首先使用objdump命令对bomb程序进行反汇编,并将汇编代码输出到asm.txt中。
阶段一、字符串比较
打开asm.txt文件,搜索到phase_1函数,可以看到以下代码。
08048b33:
8048b33:
83ec14sub$0x14,%esp
8048b36:
687ca00408push$0x804a07c
8048b3b:
ff74241cpushl0x1c(%esp)
8048b3f:
e83e050000call8049082
8048b44:
83c410add$0x10,%esp
8048b47:
85c0test%eax,%eax
8048b49:
7405je8048b50
8048b4b:
e829060000call8049179
8048b50:
83c40cadd$0xc,%esp
8048b53:
c3ret
可以看出,用户输入字串指针保存在0x1c(%esp),然后调用,待返回后,测试返回值,若equal则进入下一phase,否则,从可知该函数用于比较两函数的值,因此需要两个字串作为输入,上面代码中,pushl0x1c(%esp)用于传递用户字串指针,则push$0x804a07c自然是传递比较字串的指针了。
打开gdb,x/s0x80497c0,可以直接查看到该指针指向的子符串:
所以第一个炸弹的拆弹指令为:
IturnedthemoonintosomethingIcallaDeathStar.
阶段二、循环
在asm.txt文件中可以找到phase_2函数代码如下:
08048b54:
8048b54:
56push%esi
8048b55:
53push%ebx
8048b56:
83ec2csub$0x2c,%esp
8048b59:
65a114000000mov%gs:
0x14,%eax
8048b5f:
89442424mov%eax,0x24(%esp)
8048b63:
31c0xor%eax,%eax
8048b65:
8d44240clea0xc(%esp),%eax
8048b69:
50push%eax
8048b6a:
ff74243cpushl0x3c(%esp)
8048b6e:
e82b060000call804919e
8048b73:
83c410add$0x10,%esp
8048b76:
837c240401cmpl$0x1,0x4(%esp)
8048b7b:
7405je8048b82
8048b7d:
e8f7050000call8049179
8048b82:
8d5c2404lea0x4(%esp),%ebx
8048b86:
8d742418lea0x18(%esp),%esi
8048b8a:
8b03mov(%ebx),%eax
8048b8c:
01c0add%eax,%eax
8048b8e:
394304cmp%eax,0x4(%ebx)
8048b91:
7405je8048b98
8048b93:
e8e1050000call8049179
8048b98:
83c304add$0x4,%ebx
8048b9b:
39f3cmp%esi,%ebx
8048b9d:
75ebjne8048b8a
8048b9f:
8b44241cmov0x1c(%esp),%eax
8048ba3:
65330514000000xor%gs:
0x14,%eax
8048baa:
7405je8048bb1
8048bac:
e8dffbffffcall8048790<__stack_chk_fail@plt>
8048bb1:
83c424add$0x24,%esp
8048bb4:
5bpop%ebx
8048bb5:
5epop%esi
8048bb6:
c3ret
根据call804919e可以推测题目要求是输入六个数字。
又根据cmpl$0x1,0x4(%esp)可以推断,输入的第一个数字是1;jne8048b8a可以知道程序是一个循环。
add%eax,%eax和cmp%eax,0x4(%ebx)可以明白,每次循环的答案是上一个答案的2倍,所以可以推测答案序列为:
12481632
测试发现结果正确。
阶段三、条件/分支
Phase_3代码如下:
08048bb7:
8048bb7:
83ec28sub$0x28,%esp
8048bba:
65a114000000mov%gs:
0x14,%eax
8048bc0:
89442418mov%eax,0x18(%esp)
8048bc4:
31c0xor%eax,%eax
8048bc6:
8d442414lea0x14(%esp),%eax
8048bca:
50push%eax
8048bcb:
8d442413lea0x13(%esp),%eax
8048bcf:
50push%eax
8048bd0:
8d442418lea0x18(%esp),%eax
8048bd4:
50push%eax
8048bd5:
68daa00408push$0x804a0da
8048bda:
ff74243cpushl0x3c(%esp)
8048bde:
e82dfcffffcall8048810<__isoc99_sscanf@plt>
8048be3:
83c420add$0x20,%esp
8048be6:
83f802cmp$0x2,%eax
8048be9:
7f05jg8048bf0
8048beb:
e889050000call8049179
8048bf0:
837c240407cmpl$0x7,0x4(%esp)
8048bf5:
0f87fc000000ja8048cf7
8048bfb:
8b442404mov0x4(%esp),%eax
8048bff:
ff2485eca00408jmp*0x804a0ec(,%eax,4)
8048c06:
b871000000mov$0x71,%eax
8048c0b:
817c2408e90000cmpl$0xe9,0x8(%esp)
8048c12:
00
8048c13:
0f84e8000000je8048d01
8048c19:
e85b050000call8049179
8048c1e:
b871000000mov$0x71,%eax
8048c23:
e9d9000000jmp8048d01
8048c28:
b86f000000mov$0x6f,%eax
8048c2d:
817c2408b90200cmpl$0x2b9,0x8(%esp)
8048c34:
00
8048c35:
0f84c6000000je8048d01
8048c3b:
e839050000call8049179
8048c40:
b86f000000mov$0x6f,%eax
8048c45:
e9b7000000jmp8048d01
8048c4a:
b870000000mov$0x70,%eax
8048c4f:
817c24088e0100cmpl$0x18e,0x8(%esp)
8048c56:
00
8048c57:
0f84a4000000je8048d01
8048c5d:
e817050000call8049179
8048c62:
b870000000mov$0x70,%eax
8048c67:
e995000000jmp8048d01
8048c6c:
b868000000mov$0x68,%eax
8048c71:
817c24088d0300cmpl$0x38d,0x8(%esp)
8048c78:
00
8048c79:
0f8482000000je8048d01
8048c7f:
e8f5040000call8049179
8048c84:
b868000000mov$0x68,%eax
8048c89:
eb76jmp8048d01
8048c8b:
b864000000mov$0x64,%eax
8048c90:
817c2408eb0000cmpl$0xeb,0x8(%esp)
8048c97:
00
8048c98:
7467je8048d01
8048c9a:
e8da040000call8049179
8048c9f:
b864000000mov$0x64,%eax
8048ca4:
eb5bjmp8048d01
8048ca6:
b86a000000mo