计算机系统基础实验:拆解Binary Bombs

需积分: 0 1 下载量 7 浏览量 更新于2024-07-01 收藏 1.9MB PDF 举报
"19020011038-岳宇轩-lab21" 这是一份关于计算机系统基础实验的报告,由岳宇轩同学完成,实验主题为"Lab2BinaryBombs",旨在提升对程序机器级表示、汇编语言、调试器和逆向工程的理解,以及熟悉Linux基本操作命令和程序开发环境。实验中,学生需通过GDB调试器逐步分析一个名为"Binary Bombs"的程序,该程序在每个阶段要求输入特定字符串,正确则进入下一阶段,错误则程序“爆炸”。 实验内容包括六个阶段,涉及不同的编程概念和技术: 1. 字符串比较:学生需要理解如何通过汇编代码分析字符串匹配的过程,找出正确答案。例如,在第一阶段,学生通过观察指令`d49`和`d48`确定了输入值和目标字符串的位置,并找到了匹配字符串:"Therearerumorsontheinternets." 2. 循环:第二阶段涉及到读取六个数字并进行比较。通过分析`read_six_number`函数,学生发现程序检查这些数字是否满足特定条件。如果第一个数字为负数,程序会触发“爆炸”。 3. 条件/分支(含switch语句):在这个阶段,学生可能遇到了基于条件判断的汇编代码,例如使用`js`指令根据标志位决定执行路径。 4. 递归调用和栈:阶段四可能涉及递归函数调用,学生需要理解栈帧和返回地址的概念,以及如何通过调试器追踪递归过程。 5. 指针:第五阶段可能涉及到指针的使用,如通过指针访问和修改内存中的数据。 6. 链表/指针/结构:在最后一个阶段,学生可能遇到了链表结构,需要理解链表节点的指针操作和遍历。 实验要求学生不仅要熟练掌握GDB的基本操作,例如设置断点、单步执行、查看寄存器状态等,还要能使用`objdump`等工具来分析二进制文件。此外,学生需要能够理解和推断出程序预期的输入,以成功解除所有阶段的“炸弹”。 通过这样的实验,学生能够深化对底层计算机系统运作的理解,提高逆向工程和调试技能,这些都是软件开发和安全分析的重要基础。