翻出几份大学时的实验报告
最近在硬盘里翻出来一个文件夹,名字叫「计算机原理」。
点开一看,是大学时候那门课的实验报告。`.docx` 的表格式报告,标题栏写着姓名、班级、学号、指导老师、实验日期——标准得像是昨天才交上去的。
我盯着那几个字段看了挺久。
---
其实内容不多。一门专业基础课,几个实验:
- 看编译器怎么把 `a * 3` 优化成移位和加法
- 用 IDA 和 OllyICE 逆一个登录校验,从内存里挖出密码
- 手工构造栈溢出,让一个 exe 打开蜘蛛纸牌
- 算直接映射缓存的命中率,最后算出来是 0%
当时的实验报告,很多地方写的是「在同学的帮助下我明白了」「在请教同学之后我发现」。
现在回头看,那大概是真话——**大部分时间确实是卡住的**。
---
## 为什么想整理
说实话,当时做这些实验,**很多是照着步骤跑通的**。
IDA 里看到一堆指令,跟着报告一步步点,最后蜘蛛纸牌弹出来了,实验就算完成。
但要是有人问我「为什么是 `jmp esp` 而不是 `jmp eax`」,
或者「为什么你的机器码和别人的不一样」——
那会儿的我大概答不上来。
现在重新把报告敲成 Markdown,一行一行写下来,**才发现自己当时漏掉了多少东西**。
比如栈溢出那个实验,报告里我写「我的 jmp esp 地址和别人的不一样,陷入了巨大的混乱」。
当时是模模糊糊地绕过去了。这次整理的时候才真正想通:
> `call` 后面跟的是**相对偏移量**,不是绝对地址。
> 所以同一段代码放在不同位置,编译出来的机器码当然不一样。
一句话的事。当时卡了我很久。
---
## 顺手做了点处理
搬到站上之前,我把报告里的个人信息都删掉了:
- 姓名、学号、班级
- 指导老师姓名
- 带年级标识的课程资料路径
原始报告里那些截图也没放上来——IDA 和 OllyICE 的窗口标题、文件路径里
很容易带上 Windows 用户名,我没法逐张确认干净,索性只保留文字部分。
至于内容本身,我基本是**照实整理**的,包括当时写得不太对的地方。
> 毕竟这是一份「我当时是怎么想的」的记录,
> 而不是「一份标准答案」。
> 把它修得完美无缺,反而没什么意思了。
---
## 一点感慨
大学那几年,很多课都是这样:**上完、考完、就忘了**。
当时觉得抽象得要命的东西——补码、大小端、缓存映射——
现在做前端、写部署脚本,居然还真用得上。
至少看到 `imul` 配 `shr` 会反应过来「这原本是个除法」。
也可能只是因为,**现在终于有耐心把它看懂了**。
那会儿赶着交作业,一心想的是「怎么让它跑起来」。
现在没有 deadline 了,反而愿意坐下来,把每一条指令的意思弄清楚。
也算是另一种形式的复习吧。
---
## 关于这个系列
我打算陆陆续续把大学时期的课程实验都整理出来。
不图别的,就是想给那几年留个记录。
如果刚好有人在学同样的课、被同样的地方卡住,
能从这里找到一句有用的话,那就更好了。
第一篇已经从「计算机原理」开始了。
后面如果翻出别的课,再慢慢加。
---
*写于一个整理旧文件的下午。*
#随笔#大学#整理