第3章学习笔记:从源代码到可执行文件
课程笔记沿程序真实运行路径学习从源代码到可执行文件,始终区分抽象接口、实现状态和可观测证据。
关联:章节 第3章 从源代码到可执行文件
第3章笔记:从源代码到可执行文件
本章要解决的问题
沿程序真实运行路径学习从源代码到可执行文件,始终区分抽象接口、实现状态和可观测证据。 本章七课是一条连续推理链,不是七个标题。先确定上一课输出怎样成为下一课输入,再记录对象、事件、状态和证据。
七课连接
- 预处理与翻译单元:关系
source\to tokens\to AST;练习为为《预处理与翻译单元》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 source\to tokens\to AST 复算关键量;边界为不能把《预处理与翻译单元》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《编译前端与中间表示》。 - 编译前端与中间表示:关系
IR\ preserves\ semantics;练习为为《编译前端与中间表示》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 IR\ preserves\ semantics 复算关键量;边界为不能把《编译前端与中间表示》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《汇编与机器码》。 - 汇编与机器码:关系
assembly\to encoding;练习为为《汇编与机器码》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 assembly\to encoding 复算关键量;边界为不能把《汇编与机器码》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《目标文件与节》。 - 目标文件与节:关系
ELF=sections+symbols+relocs;练习为为《目标文件与节》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 ELF=sections+symbols+relocs 复算关键量;边界为不能把《目标文件与节》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《符号表与重定位》。 - 符号表与重定位:关系
S+A-P;练习为为《符号表与重定位》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 S+A-P 复算关键量;边界为不能把《符号表与重定位》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《静态/动态链接与装载》。 - 静态/动态链接与装载:关系
load\ address+relocation;练习为为《静态/动态链接与装载》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 load\ address+relocation 复算关键量;边界为不能把《静态/动态链接与装载》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《最小重定位器实验》。 - 最小重定位器实验:关系
patched=base+addend;练习为为《最小重定位器实验》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 patched=base+addend 复算关键量;边界为不能把《最小重定位器实验》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《ISA是软硬件契约》。
章内学习法
先闭卷画一条最短执行轨迹,再为每个箭头标主体和所属层;随后逐式复算,运行本章代码实验四组测试,并增加一个越界、权限、冲突、乱序或故障输入。只要实际值与模型不同,就保存首个偏差,不用后续噪声替代根因。
错题与复习
把错误归入分层混淆、位宽/单位、状态跳步、事件顺序、权限遗漏、并发交错、故障恢复或观察窗八类。一周后更换参数重做阶段卷;能向同学从现象讲到机制、公式、实验和边界,才算学会。