计算机系统原理实验之BombLab二进制炸弹3、4关

本文详细介绍了计算机系统原理实验中的BombLab,通过分析汇编代码,讲解了第三关和第四关的解决策略。第三关涉及switch语句,通过分析eflags标志位和栈帧,找到了通关密码。第四关引入了递归函数func4,通过分析函数调用和参数范围,成功解除炸弹。
摘要由CSDN通过智能技术生成


实验目的:

通过二进制炸弹实验,熟悉汇编语言,反汇编工具objdump以及gdb调试工具。

实验内容:

1、eflags标志位的查看。

2、backtrace指令学习。

3、炸弹实验第3、4关。

实验过程:

1、进入gdb调试命令,设置断点运行之前课上得到的hello文件,然后输入i r指令即可查看寄存器的内容,当然也包括eflags标志位寄存器的值。

 

32CPU的标志位寄存器的主要标志位分布如下:

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

VM

RF

 

NT

IOPL

OF

DF

IF

TF

SF

ZF

 

AF

 

PF

 

CF

 

 

 

 

 

 

0

0

1

0

1

0

0

0

0

1

1

0

在上面我查出的标志位寄存器eflags的值为0x286转化为二进制形式即为001010000110,对应到相应位即可知道哪些标志位值为1,我们也可以通过例如set eflags=0x206语句来设置标志位的值,至于你想要什么标志位值为1,则可以通过把上表中对应位的值置为1,再转化为16进制数来改变标志位的值。

 

2、backtrace指令可以查看程序所有函数的栈帧,简写为bt,以下显示的即为main函数和sum函数栈帧的返回地址。

 

也可以通过以下指令查看帧的详细信息:

 

3

第三关:

1)、有了前面两关的经验,在过第三关的时候,一开始我就直接进入bomb文件的gdb调试界面,反汇编得到phase_3函数的汇编代码,代码很长一次性显示不完全,回车即可接着显示余下的代码直到显示完(这里没有截完所有的图)。

 

观察整个phase_3函数的汇编代码,我发现它跟前面两关有一个相似之处,调用了两个函数,其中一个仍是爆炸函数,另一个是__isoc99_sscanf@plt函数,现在猜不出这个函数要干嘛了,所以,我索性直接开始分析phase_3函数汇编代码,希望能发现一些线索。

2)、开始分析phase_3函数的反汇编代码:

首先是为函数准备堆栈,这里开辟了40个字节的内存。

 

  • 16
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值