CSAPP Data Lab
2020-07-02
Data Lab 的题1,第一眼觉得不难,仔细一看发现限制非常严格,比如只允许部分位运算符等,难度一下子就上去了,所以花了不少时间。 dlc 是 64 位 Linux 程序,使用 ./dlc bits.c 来检查是否符合限制条件。但 Makefile 里却指定了 -m32,可能是考虑到 C 标准只规定 int 至少为 16 位,一些环境可能会生成非 32 位的 int。 …
CSAPP 信息的表示和处理
2018-12-25
2.1 信息存储 2.1.1 十六进制表示法 十六进制转换窍门:记住 A、C 和 F 对应的值,B、D 和 E 可通过计算它们与前三个值的相对关系来完成。 对于 2 的非负整数 n 次幂 x,即 $x = 2^n$,一个转换为十六进制的技巧:x 的二进制形式就是 1 后面跟 n 个 0,把 n 表示成 $i + 4j$,其中 $0 \le i \le 3$,当 i 为 0、1、2、3 时,x 的十六进制开头数字分别为 1、2、4、8,后面跟着 j 个十六进制的 0。如 $2048 = 2 ^ {11}$,有 $n = 11 = 3 + 4 \cdot 2$,从而得到十六进制 0x800。 …
CSAPP 计算机系统漫游
2018-12-24
1.1 信息就是二进制位+上下文 例如 C 语言源码: hello.c #include <stdio.h> int main() { printf("hello, world\n"); return 0; } 用 vim 以二进制方式打开 vim -b hello.c,由于是纯 ASCII 码写成的,所以和以文本方式打开没有区别,然后使用 :%!xxd 转换为 16 进制 ASCII 码: …