知识点
这门课的目的:深入理解当你执行代码时,计算机在做什么
LLDB:基于 LLVM 的命令行调试器,类似 GBD
内存引用 Bug
typedef struct {
int a[2];
double d;
} struct_t;
double fun(int i) {
volatile struct_t s;
s.d = 3.14;
s.a[i] = 1073741824; /* 有可能出界 out of bound */
return s.d;
}
- fun(0) = 3.14;fun(1) = 3.14
- 然而 fun(2) = 3.1399998664856;fun(3) = 2.00000061035156
- 这段程序中,发生了访问越界,然而 C 语言不会阻止你这样做,你可以通过地址引用从 int a[] 越界到 double d