寝室原创:计算机导论CSAPP实验详解(level1-4)

需积分: 9 1 下载量 84 浏览量 更新于2024-07-24 收藏 168KB PDF 举报
本篇文档涉及到的是计算机导论课程中的实验作业,主要围绕着CSAPP(Computer Science Application Programming)中的Lab系列进行讲解。Lab3至Level4是逐步递增难度的挑战,每个级别都涉及到了程序逆向工程和调试技巧。 Level 0 的任务相对简单,目标是通过输入一个过长字符串使得程序的smoke地址覆盖eip(指令指针寄存器),以便控制程序流程。答案提供了一个特定的16进制字符串,即`31313131303030...10890408`。 Level 1 建立在Level 0 的基础上,增加了一个与cookie相关的参数。解答同样给出了一个16进制字符串`303030...6aeb174c`,这个阶段可能需要找到cookie的存储位置并利用它来进一步控制程序。 Level 2 的挑战在于,由于存在某种限制,不能直接运行程序,必须在GDB(GNU调试器)环境下执行。通过分析得知cookie存储在`0x804aa50`,global_value位于`0x804aa60a`。在这个级别,学生需设置断点、查看寄存器值来找出buf的地址,最终提供的输入字符串是`b86aeb174ca360aa0408c300000000000cbbffbf8c890408`。 Level 3 的难度提升,要求先设置eax和ebp的值,然后将callgetbuf指令的地址压入栈,最后ret返回到test函数。解答给出了输入字符串`b86aeb174cbd38bbffbf68ee890408c30cbbffbf`。 Level 4 是整个系列中最具挑战性的一环,因为GDB下无法多次输入字符串,并且直接运行会遇到栈内存问题。解决方法是使用catexploit5.txt文件生成5次输入,然后在GDB环境下运行。程序代码提到eax被设为`0x4c17eb9a`,而ebp的值不固定,但与esp(堆栈帧指针)有一个固定的偏移量24。提供的源码样本展示了如何构造这种复杂操作。 这些实验着重于让学生理解程序逆向工程,内存管理,以及调试工具的使用,不仅要求技术上的编程能力,还锻炼了解决实际问题的思维和技巧。