实验目录:
一、实验目的
- 熟悉linux基本操作命令,其中常用工具和程序开发环境
- 熟悉反汇编obnjump、调试指令gdb的操作
- 熟悉汇编语言中的循环、选择语句,及指针、链表、数组、二分树的应用
二、实验要求
- 尽快熟悉linux基本操作命令,还有其中常用工具和程序开发环境。以及objdump、gdb指令
- 灵活掌握各种汇编语句,以及查询内存中的信息的方法。
- 每个炸弹考察了汇编语言的一个不同方面:阶段一,字符串比较;阶段二,循环;阶段三,条件/分支;阶段四,递归调用和栈;阶段五,指针;阶段六,链表/指针/结构。隐藏阶段只有当在阶段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。(该值即为第一个数字)
通过分析这两句话得到,该阶段的