先上结论:
- 预处理
- 编译
- 汇编
- 链接
首先创建文件
vim hello.c
eg:
最初文件为:
#include<stdio.h>
int main()
{
//测试
return 0;
}
一,预处理
- 就是将文件中的宏和注释全部去掉
- gcc -E hello.c -o hello.i
eg:
经过预处理后文件
*************
int main()
{
return 0;
}
上面的****代表是stdio.h的库的拆分,然后注释也被去掉了
二,编译
- 编译为汇编文件
- gcc -S hello.i -o hello.s
eg:
经过编译后:
0046138A push esi
0046138B push edi
0046138C lea edi,[ebp-0C0h]
00461392 mov ecx,30h
00461397 mov eax,0CCCCCCCCh
0046139C rep stos dword ptr es:[edi]
//测试
return 0;
0046139E xor eax,eax
}
004613A0 pop edi
004613A1 pop esi
004613A2 pop ebx
004613A3 mov esp,ebp
004613A5 pop ebp
004613A6 ret
三,汇编
- 把汇编文件变为二进制的机器指令
- gcc -c hello.s -o hello.o
eg:
变为二进制:
0x011A5FCC ?? ?? ?? ?? ....
0x011A5FD0 ?? ?? ?? ?? ....
0x011A5FD4 ?? ?? ?? ?? ....
0x011A5FD8 ?? ?? ?? ?? ....
0x011A5FDC ?? ?? ?? ?? ....
四,链接
- 链接所用到的库
- gcc hello.o -o hello
变成hello之后,就可以使用了。
偷的图: