本仓库用于记录我 CSAPP LAB
的源代码以及相关问题
所有实验均已完成
- Data Lab
- Domb Lab
- Attack Lab
- Buffer Lab(IA32)
- Architecture Lab
- Architecture Lab(Y86)
- Cache Lab
- Performance Lab
- Shell Lab
- Malloc Lab
- Proxy Lab
Architecture Lab(Y86)
为CSAPP:2e
的版本,可以只做Architecture Lab
Buffer Lab(IA32)
为Attack Lab
的32
位版本,也属于CSAPP:2e
,可以只做Attack Lab
Performance Lab
为Cache Lab
的弱化版本,由于此实验设计较为粗糙,因此可以只做Cache Lab
- 对计算机补码表示和运算、二进制数据操作有更深刻的认识,对 IEEE 浮点数表示及其精度上的局限有清晰的认识
- 具有理解汇编和反汇编代码的能力,能对过程调用时所进行的操作有清晰的理解,熟悉 CGDB 调试操作
- 了解
CPU
的运行方式,对CPU
识别指令的过程以及缓冲区溢出攻击有所认识 - 加深对
CPU
流水线的工作原理的理解,学习了对底层指令进行优化的方法,提高了编码能力 - 学习了
LRU
在cache
当中的实现,了解了cache
的寻址以及碰撞等工作原理,能够有能力编写出降低cache
碰撞的代码 - 学习了信号处理函数的使用以及多进程程序避免竞争的办法
- 学到内存管理方面的知识,对
malloc
和free
的实现以及指针和链表有了更深入的理解,学习了很多gdb
调试的技巧,能够熟练使用gdb
- 学到多线程、信号量的应用,理解了多路复用、客户端、预线程化服务器的开发雏形
.
├── ArchitectureLab
│ └── archlab-handout
├── Attacklab
│ └── target1
├── BombLab
│ └── bomb
├── CacheLab
│ └── cachelab-handout
├── DataLab
│ └── datalab-handout
├── MallocLab
│ └── malloclab-handout
├── ProxyLab
│ └── proxylab-handout
├── ShellLab
│ └── shlab-handout
└── Tar
在 Ubuntu22.04
平台上运行
如出现:
/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: 没有那个文件或目录
| #include <bits/libc-header-start.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
说明缺少32
位的库文件,运行以下命令进行安装
sudo apt-get install gcc-multilib