前言
本文讲解了GCC的编译过程,预处理、编译、汇编和连接。还有编译工具nasm的使用。
编译过程
预处理
编辑一个hello.c文件,文件内容如下:
#include <stdio.h>
int main(void)
{
printf("Hello World! \n");
return 0;
}
预处理语句:
gcc -E hello.c -o hello.i
hello.i文件内容:

编译
gcc -S hello.i -o hello.s
hello.s文件内容:

汇编
gcc -c hello.s -o hello.o
形成目标文件(.o文件)
静态库链接
gcc hello.c -o hello
链接形成可执行文件(.exe文件)

动态库链接
gcc -static hello.c -o hello
链接形成可执行文件(.exe文件)
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

ELF 文件的段
readelf -S hello
反汇编ELF
objdump -D hello
使用objdump -S 将其反汇编并且将其C 语言源代码混合显示出来:
gcc -o hello -g hello.c //要加上-g 选项
objdump -S hello
NASM的安装与使用
下载安装包到Windows系统里,进行解压。解压后分享到虚拟机中,如图所示:

再将文件夹复制到虚拟机中,然后执行命令:
./configure
make
sudo make install
hello.asm源码参考
编译:
nasm -f elf64(elf32) hello.asm
链接:
gcc -no-pie -o hello hello.o
输出结果如图所示:

总结
通过本次学习,基本清楚了编译的整个过程,包括预处理、编译、汇编和链接这四个过程。安装nasm之后,可以直接对.asm文件进行编译。
本文详细介绍了GCC编译器的工作流程,包括预处理、编译、汇编和链接等阶段,并通过一个简单的示例程序进行了演示。此外,还介绍了如何使用NASM编译器来编译ASM文件。

7200

被折叠的 条评论
为什么被折叠?



