1 计算机系统导论
计算机系统导论
本实验要求你书写一个通用目的cache模拟器,然后优化一个小的矩阵转置核函数(kernel),使得在模拟cache上的不命中次数最小。Cachel Lab使用Valgrind工具来产生内存地址访问序列(trace)。
本实验要求你实现一个具备简单作业控制功能的shell程序,具体包括:ctrl-c和ctrl-z快捷键、fg、bg和jobs命令。你会初次接触到应用级的并发,了解Linux进程控制、信号和信号处理的思路和理念。
在本实验中,你会得到两个x86-64二进制可执行文件,称为targets,这两个程序都有缓冲区溢出bug。一个target容易遭受代码注入攻击;另一个容易遭受面向返回的编程攻击。你要基于代码注入和面向返回的编程来利用这些漏洞,改变这两个程序的行为。通过这个实验,你能了解栈的规则,同时理解程序中如果含有容易遭受缓冲区溢出攻击的代码,是多么危险的事情。
Bomb Lab又叫“二进制炸弹”实验,会给你一个目标代码文件。运行时,它会提示你输入6个不同的字符串,如果输入不正确,炸弹就会“爆炸💥”,打印出错误信息。你必须通过反汇编和逆向工程该程序,确定正确的字符串,解除你的炸弹的引信。
本实验能教会你理解汇编语言,使你学会如何使用调试器(debugger),更重要的是,它非常有趣!堪称经典。
这个实验要求你用C语言中特定的操作来实现一些简单的逻辑、补码和浮点运算函数。例如,只能用位级运算和线性(没有循环的)代码来计算一个数的绝对值。它能帮助你理解C语言中数据类型的位级表示,以及数据操作时的位级行为。
本实验主要是锻炼你的C语言编程能力,主要检测以下技能:
• 显式内存管理;
• 创建和操作基于指针的数据结构;
• 实现输入无效参数也能正确运行的健壮代码,如 NULL 指针;
• 在 Makefile 中创建规则。