本章学到了什么
- 调试技巧:在VS中断点调试,查看反汇编代码,step into进行步进调试,运行过程中查看寄存器、内存地址、变量值变化等。
- 机器码构造能力:使用C/C++中的直接在C代码里写汇编语言的功能(_asm)。学会了常见的汇编指令,接触了几个带有循环、跳转的汇编语言代码。
- 指针机制:对C/C++中的指针机制有了更深的了解。
- 函数调用机制:函数调用过程中栈的变化。函数调用约定的大致了解。
- 数组模型
- 结构体模型
- 对齐:搞清楚了为什么对齐这么重要。
- switch分析:switch的汇编实现原理。
- 加载期重定位:二进制编译和加载过程中的重定位机制究竟是怎么回事。
学习感想
- “猜测 - 实证 - 构建”的学习方法。
在学习底层相关的知识时,总会遇到很多问题。那么遇到问题,一定要追根究底,不能马马虎虎就过去了。不能“大概明白了”,而是要真的搞明白。这个具体的过程就是,在学习的过程中,提出问题,猜想这个问题的答案可能是什么,根据自己的猜想去写代码或者调试求证。证实了之后,提炼出这个问题包含的知识点,再构建例子与验证它。这个完整的过程搞明白了,对于一个知识点才算是真正地理解了。
反观我自己之前的学习方法,看资料的时候,往往一带而过,缺乏追根问底的精神,所以感觉一个东西好像搞明白了,其实根本就没有。在平日学习中遇到的问题,很多时候也是上网搜一下知道怎么回事就算了,却没有自己动手做一做,下一次一遇到的