深入理解计算机系统——第三、四、五章
3 程序的机器级表示
第三章主要讲述,汇编指令对寄存器的操作,以实现代码的功能。包括:加法、减法、乘法、循环、条件、数组、指针...的内部原理。
-
union: 不同字段引用相同的内存块。
-
字节对齐
-
函数指针:函数指针的值是该函数机器代码表示中第一条指令的地址。
3.1 GDB调试器
g++ -o test_gdb test.cpp -g
gdb
file test_gdb
break func
break row_index
break row_index if a==3
r
c
q
3.2 缓冲区溢出
危害: 让程序执行它本不愿意执行的函数。
对抗缓冲区溢出攻击的方法:
- 栈随机化
- 栈破坏检测
- 限制可执行代码区域
4 优化程序性能
4.1 方式
示例:
-
消除循环的低效率
-
减少过程调用
-
消除不必要的内存引用
- 循环展开
- 多个变量积累
- 优化合并代码