【WIP】CMU 15-213 笔记 Part.1

Lecture 1

实验

Lab1:数据实验,用位运算方式实现计算器

Lab2:炸弹实验,学会GDB

Lab3:攻击实验,代码注入和ROP

Lab4:缓存实验,写个缓存模拟器并优化

Lab5:Shell实验,写一个完整的Linux Shell

Lab6:Malloc实验,写自己的Malloc库

Lab7:代理实验,写自己的Web Proxy

Lecture 2

比特、字节和整数

  • long double数据类型:在传统的32位架构或64位架构中是没有的。但在x86-64架构中占10或16字节(内存对齐)。

  • 32位架构的指针为32位(4字节),64位架构的指针为64位(8字节)。

  • 布尔代数:和 或 非 异或

  • 位运算符 & | ~ ^,逻辑运算符 && || !

  • 逻辑运算的短路特性

  • 逻辑位移和算数位移:

    • 在位移运算符之前的数(比如$x<<y$中的$x$)是无符号数的话,位移运算对应的汇编指令为逻辑位移。若是有符号数,该运算对应的汇编指令是算数位移。
    • 对于左移:二者都是在右侧补0。
    • 对于右移:逻辑位移补0,算数位移补最高有效位(符号位)。如:令$x=10100000_{(2)}$,右移3位,逻辑位移结果$x>>3=00010100_{(2)}$,算数位移结果$x>>3=11110100_{(2)}$。
  • 位移数小于0(即$x<<y$中的$y$小于0)或大于数据类型占用的长度(如char类型中y大于8)是未定义的操作。结果和编译情况依编译器和架构变化。

  • 正数原码转十进制:求2的幂次加和即可。

$$ B2U(X) = \sum^{w-1}_{i=0}{x_i \cdot 2^i} $$

  • 补码转十进制:注意符号位。也可写成公式。

$$ B2T(X) = -x_{w-1} \cdot 2^{w-1} + \sum^{w-2}_{i=0}{x_i \cdot 2^i} $$

  • 补码计算举例:将补码$101101_{(2)}$化为十进制。

$$ 依据公式,\\ 101101_{2} = 2^{0} \cdot 1 + 2^{1} \cdot 0 + 2^{2} \cdot 1 + 2^{3} \cdot 1 + 2^{4} \cdot 0 + 2^{5} \cdot (-1) \\ = 1 + 0 + 4 + 8 + 0 - 32 = -19 $$

  • 无符号数最大值$2^w - 1$,最小值$0$。有符号数最大值$2^{w-1} - 1$,最小值$-2^{w-1}$。
  • 补码对数的映射具有“对称性”。

image-20210411163333866

  • 补码与原码(无符号位)间的转化。

image-20210411163354037

  • C语言上二者的互相转化。
1
2
tx = (int) ux;
uy = (unsigned) ty; // unsigned 等价于 unsigned int
  • 有符号数与无符号数进行操作时(例如,有符号数与无符号数相加),有符号数会被隐式转换为无符号数。

  • 注意在有条件限定的情况下,下列运算的运算结果:

image-20210411163406261

  • 一个C编程中的典型错误:
1
2
3
4
5
6
7
8
9
10
11
int a[250] = {0};
unsigned int i; // 注意是无符号整型

for(i = 249; i >= 0; i--) {
a[i] = 5;
}

/*
运行的结果为:遍历数组a,每个元素均赋值为5后,访问非法下标。
由于i是无符号的数,i=0时for循环进行后,i--,导致i溢出为4294967295。
*/
  • 符号扩展:对有符号整数的类型转换是通过左侧截断和左侧补最高有效位(符号位)实现的。

    例子:设6位整数a的十进制值为10,则其二进制位为$001010$。将其扩展为10位整数,二进制位为$0000001010$。

    设6位整数的十进制值为-10,则其二进制位(补码)为$110110$。将其扩展为10位整数,二进制位为$1111110110$。

  • 原码取2的幂次模:相当于从右边截断。

    例子:数字10对4取模。通过十进制计算,$10=4*2+2$,得取模结果为2。

    从原码的角度来看,10的原码为$1010_{(2)}$。对4取模,即对$2^2$取模。从右向左保留两位后截断即可,结果即为$10_{(2)}$,转化为10进制为2。

Lecture 3

作者

ObjectNotFound

发布于

2021-03-20

更新于

2022-08-15

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×