汇编和C语言结构
C语言结构
C语言编译链接过程
- 预处理: 删除注释, 将宏定义展开, 执行条件编译指令只保留 满足条件的部分, 将整个头文件插入到
include
位置 - 编译: 将预处理后的文件编译成汇编代码
- 汇编
- 链接
x86汇编代码结构
- 伪指令
- 标号
- 指令
以.
开头的是伪指令, 为变量分配内存, 指定变量的值, 也可以协助汇编器做汇编工作, .set
定义一个立即数
标号, 一个变量+:
, 代表一个地址, 例如aa
处就是255
, 在写汇编过程中可以使用该标号, 汇编编译器在编译过程中会将标号替换为地址
指令, 每一个指令对应一个机器指令, 如果不做链接操作, 得到的文件就是xxx.o
, 包含二进制指令和数据, 以.
开头的伪指令没有机器指令
链接
将多个初始的目标文件, 合并到一个可执行文件, 将代码段代码段整合, 数据段数据段整合
程序加载执行
OS会将可执行文件加载到内存, 解析可执行文件的内容, 将每个段的信息加载到内存中进程所对应的虚拟地址空间, 跳转到一个入口地址去执行