来源: http://csapp.cs.cmu.edu/3e/labs.html
❗️提醒:在每个实验之前仔细阅读官网的 write up
环境:
因为很多文件在 MacOS 上无法直接运行,所以程序在 docker 容器下运行。IDEA 的文档 https://www.jetbrains.com/help/idea/docker.html 可以帮助搭建环境。
在这里我用的镜像是 gcc
docker run --rm -it --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v ~/Project/personal-project/csapp/labs/bomb:/app -w /app gcc
运行参数是 gdb 调试需要。 具体见 https://github.com/tonyOreglia/argument-counter/wiki/How-to-use-GDB-within-Docker-Container
进入容器之后,运行:
apt-get update
apt-get install gdb
注意 docker 是 64 位系统,Data Lab
makefile 需要改为 64 才能直接运行。
寄存器使用惯例:https://en.wikipedia.org/wiki/X86_calling_conventions 我们对应的是 x86-84 GCC 可以看出参数寄存器: RDI, RSI, RDX, RCX, R8, R9, 由调用者保存 RAX 返回寄存器 RAX, R10, R11 调用者保存 RBX R12 R13 R14 RBP RSP 调用者保存
- Data Lab ✅
- Bomb Lab ✅
- Attack Lab ✅
Buffer Lablegacy & replaced by attack lab- Architecture Lab
Architecture Lab (Y86)legacy & replaced by 5- Cache Lab ✅ 第二个实验可能会超时,需要修改 test-trans.c 文件中 alarm 时间
- Performance Lab
- Shell Lab
- Malloc Lab
- Proxy Lab