SA****6343 孙洪菠 信息安全
一、C程序的编译过程
1.1 C程序的编译过程:
GCC接受example.c作为输入,最后生成可执行代码example的看似简单的流程所经历的复杂步骤
编译预处理:读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理;
编译阶段:通过词法分析和语法分析,在确认所有的指令都符合语法规则后,将其翻译成等价的中间代码表示或汇编代码;
汇编阶段:把汇编代码翻译成目标机器指令;
链接:将有关的目标文件彼此连接。
1.2 源文件Example.c
1 //Example.c 2 3 int g(int x) 4 { 5 return x + 3; 6 } 7 8 int f(int x) 9 { 10 return g(x); 11 } 12 13 int main() 14 { 15 return f(8)+1; 16 }1.3 预处理后的程序Example.cpp
命令:gcc -E -o Exmple.cpp example
1 # 1 "Example.c" 2 # 1 "<built-in>" 3 # 1 "<command-line>" 4 # 1 "Example.c" 5 6 7 int g(int x) 8 { 9 return x + 3; 10 } 11 12 int f(int x) 13 { 14 return g(x); 15 } 16 17 int main() 18 { 19 return f(8)+1; 20 }1.4 编译后的汇编程序Example.s
命令:gcc -x cpp-output -S -o example.s example.cpp 或者 gcc -S -o Example.c Example.c
1 .file "Example.c" 2 .text 3 .globl g 4 .type g, @function 5 g: 6 pushl %ebp 7 movl %esp, %ebp 8 movl 8(