一:执行之前首先设置字符串
#include <stdio.h> //此程序很简单,仅仅打印一个 Hello World 的字符串。
int main(void) {
printf("Hello World! \n");
return 0;
}
预处理基本操作
1.将所有的#define 删除,并且展开所有的宏定义,并且处理所有的条件预编 译指令,比如#if #ifdef #elif #else #endif 等。
2.处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。
3.删除所有注释“//”和“/* */”。
4.添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
5.保留所有的#pragma 编译器指令,后续编译过程需要使用它们。
编译执行:
汇编: 将编译生成的 hello.s 文件汇编生成目标文件 hello.o
GCC 的选项-c 使 GCC 在执行完汇编后停止,生成目标文件
ELF文件分析
链接器链接后生成的最终文件为 ELF 格式可执行文件,一个 ELF 可执行文件通常 被链接为不同的段,常见的段譬如.text、.data、.rodata、.bss 等段
.text:已编译程序的指令代码段。
.rodata:ro 代表 read only,即只读数据(譬如常数 const)。
.data:已初始化的 C 程序全局