Linux学习笔记(1)汇编的编译原理

汇编的编译原理:
1.预处理(预编译)--------cpp/gcc -E .c->.i
预编译主要处理源代码中以#开始的预编译指令
(1)将所有#define删除,并且展开所有宏定义
(2) 处理所有的条件预编译命令。
(3)处理#include,将被包含的文件插入到该预编译指令的位置。
(4) 删除所有的注释。
(5) 添加行号和文件名标识,以便于产生编译错误时报错。
(6)保留#pragma编译命令。
2.编译----------ccl/gcc -s/gcc -o .i->.s
编译过程是对词法分析、语法分析、以及语义分析、代码优化。
所有运算都在编译期间。
3.汇编---------as/gcc -c .s->.o
把指令转换成二进制
4.链接---------ld
链接的核心是处理符号表中的信息。
(1) 合并段和符号表
(2)确定段大小和起始偏移
(3) 符号解析(把und区数找到位置)在符号引用的地方找到符号定义的地方。
(4) 分配地址
(5) 符号重定位(.text)
在这里插入图片描述
链接时95%的错误为符号解析错误,链接器只关心全局符号。例如:static修饰表示为local链接器不关注,所以外部看不到
5.运行
(1)mmp映射
(2)只加载.text、.rodata、.data、.bss
(3)把入口地址写入pc寄存器

猜你喜欢

转载自blog.csdn.net/qq_42111463/article/details/84147330