CSAPP学习

  1. 对象本质是位+上下文。
  2. 处理器正常的加载和存储都要经过寄存器。显示器也是内存经寄存器才能显示。
  3. 针对主存和处理器的运算差异,采用cache进行高速缓存。
  4. CPU包括高速缓存、寄存器文件以及、ALU。
  5. 文件是对IO设备的抽象,虚拟内存是对主存和磁盘的抽象,进程是处理器、主存和IO设备的抽象。
  6. 补码的必要性:原码和反码对0有不同解释。
  7. 函数传参大于6个整型参数,超过6个的部分就要通过栈传递。如果不超过可直接用寄存器传递。
  8. 被调用者保存寄存器:当过程P调用过程Q时,Q必须保存寄存器的值,要么就是根本不去改变他,要么就是把原始值压入栈中,改变寄存器的值,然后在返回前从栈中弹出旧值。
  9. 对于结构体指针而言,struct->element等同于(*struct).element。->是为了减少使用容易漏掉括号的后者。结构体元素本质上就是指针偏移。
  10. .align 4表示按4字节对齐的限制。
  11. 结构体整体、内存分配函数、栈帧也要满足字节对齐。
  12. 利用缓冲区溢出的攻击方式:攻击代码+指向攻击代码的指针覆盖返回地址。
  13. 预防12中攻击方法:栈随机化;栈保护者机制,在栈帧中任何局部缓冲区和栈状态之间存储一个特殊的金丝雀值,随机产生,返回之前检查这个值是否变化;限制代码可执行区域。
  14. x = 100, y = 300; *q = y, *p = x; t1 = *q中t1的值会因为pq是否指向同一地址而不同。
  15. 循环展开是一种程序变换,通过增加每次迭代计算元素的数量,减少循环的迭代次数。
  16. 可以将一组合并运算分割成两个或更多的部分,以更好的利用计算单元的并行特性。
  17. 局部性原理:良好的程序倾向于引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。
  18. 双重嵌套循环按照行优先顺序读数组中的元素。步长为1的引用模式是程序中空间局部性最常见和重要的来源。循环体越小,循环迭代次数越多,局部性越好。
  19. 存储器层次结构:对于每个k,位于k层的更快更小的存储设备作为位于k+1层更大更慢的存储设备的缓存。不同层之间是以块为单元进行来回复制的。
  20. 链接可以执行于编译时,也可以执行于加载时,甚至执行于运行时。
  21. 编译器必须完成两个任务:符号解析和重定位(把每个符号定义和内存位置关联起来)。
  22. 未初始化的全局变量分配到COMMOM中,未初始化的静态变量分配到.bss中。
  23. 静态库把所有的目标模块打包成一个单独的文件,可以用做连接器的输入。C链接库总是会把libc.a传入。库一般放在末尾。
  24. 共享库是一个目标模块,在运行或加载时可加载到任意的内存地址,并和一个在内存中的程序链接起来,这个过程称动态链接。共享库只把重定位和符号表信息复制到可执行文件中。
  25. 库打桩:允许截获对共享库函数的调用,取而代之执行自己的代码。
  26. 异常包括中断、陷阱和系统调用、故障和终止(硬件错误)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值