Bootstrap

计算机系统基础lab2(二进制炸弹实验)


一、实验目的

  1. 熟悉linux基本操作命令,其中常用工具和程序开发环境
  2. 熟悉反汇编obnjump、调试指令gdb的操作
  3. 熟悉汇编语言中的循环、选择语句,及指针、链表、数组、二分树的应用

二、实验要求

  1. 尽快熟悉linux基本操作命令,还有其中常用工具和程序开发环境。以及objdump、gdb指令
  2. 灵活掌握各种汇编语句,以及查询内存中的信息的方法。
  3. 每个炸弹考察了汇编语言的一个不同方面:阶段一,字符串比较;阶段二,循环;阶段三,条件/分支;阶段四,递归调用和栈;阶段五,指针;阶段六,链表/指针/结构。隐藏阶段只有当在阶段4的拆解字符串后再附加一特定字符串后才会出现(作为最后一个阶段)。

三、实验内容(所修改函数代码,功能以及重要代码的解释)

第一阶段:

密码:I turned the moon into something I call a Death Star.
分析:
在这里插入图片描述
根据strings_not_equal函数可以看出,该函数为判断字符串是否相等的函数。如果输入的字符串和%eax里面的字符不相同,则该炸弹爆炸,所以我们通过x/s $eax查看其中的数据,即可得到该阶段的密码。在这里插入图片描述

第二阶段:

密码:0 1 1 2 3 5
分析:
通过分析read_six_numbers函数可得,该阶段的密码为6个数字。
在这里插入图片描述在这里插入图片描述
通过分析这几句话可知,我们将%ebp-0x30的地址赋值给%esi。通过查看该值为0。(该值即为第一个数字)
在这里插入图片描述通过分析这两句话得到,该阶段的

;