前面两篇讲了ARM64汇编指令,本篇主要讲一下汇编器,何为汇编器呢?
汇编器主要是将汇编语言翻译为及其目标代码的程序
编译流程
1、预处理:GCC的预编译器(CPP)对各种预处理命令进行处理,例如对头文件的处理、宏定义的展开、条件编译的选择等。
gcc -E test.c - o test.i
2、编译:C语言的编译器(ccl)首先对预处理之后的源文件进行词法、语法以及语义分析,然后进行代码优化,最后把C语言代码翻译成汇编代码
gcc -S test.i -o test.s
3、汇编:汇编器(as)将汇编代码翻译成机器语言,并生成可重定位的目标文件
as test.s -o test.o
4、链接:链接器(ld)会把所有生成的可重定位目标文件以及用到的库文件综合成一个可执行二进制文件。
ld -o test test.o -lc
ELF文件
汇编阶段生成的可重定位目标文件以及链接阶段生成的可执行二进制文件都是按照一定的文件格式(ELF)组成的二进制目标文件
汇编阶段生成的可重定向目标文件和链接阶段生成的可执行二进制文件的主要区别在于,可重定向目标文件的所有段的起始地址都是0。
ld --verbose 可查看自带的链接脚本