test.c--翻译环境--test.exe--运行环境--运行结果
.编译(编译器)cl.exe
预编译--编译--汇编
预编译:
gcc test.c -E
预处理之后就停止,预处理之后产生的结果都放在test.i文件中
gcc test.c -E > test.i
完成了头文件的包含 #include
#define定义的符号和宏的替换
注释删除
文本操作
编译:
gcc test.i -S
生成:test.s
把C语言代码转化成汇编代码
语法分析
词法分析
语义分析
符号汇总
汇编:
gcc test.s -c
-->test.o(test.obj)
把汇编代码转换成了机器指令(二进制指令)
生成符号表
test.o
这个文件是elf格式
readelf - 工具
计算机:《编译原理》
如何实现一个编译器,编译器的工作原理
link.exe链接(链接器)
把多个目标文件和连接库进行链接
合并段表
符号表的合并和重定位
程序执行过程:
程序必须载入内存中。
程序的执行便开始。接着便调用main函数。
开始执行程序代码。这个时候程序将使用一个运行的堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。
终止程序。正常终止main函数;也有可能是意外终止。