预处理、编译、汇编、链接过程

预处理、编译、汇编、链接过程

预处理

引入头文件 #include

展开宏定义 #define

处理条件编译指令 #ifdef

删除注释

添加行号

在Linux下可以使用gcc -E命令把hello.c文件预处理成hello.i文件。windows这些操作都集成在编译器visual studio这些里面了。

编译

进行语法分析、词法分析、语义分析,在这里编译不过的话编译器就会报错。这一阶段会生成汇编指令文件。

汇编

(学习汇编时,比如使用masm汇编器,通过masm 指令将汇编代码文件汇编成.obj文件)

将汇编指令文件汇编成二进制指令文件,生成的.o文件就是二进制文件。机器就可以识别了。

链接

(学习汇编时,比如使用masm汇编器,通过link指令将.obj文件汇链接成.exe文件)

就是将一些.o文件和库文件链接上,包含一些函数地址、空间的分配。生成最后的可执行文件就是.exe(Windows)或.out(Linux)文件。

动态链接和静态链接

静态链接(.lib):一个大的项目由多个目标文件文件或者多个模块组成,每个模块都用到静态库的某个接口,那这个静态库在所有模块都会有一个备份。

缺点:1.浪费空间;2.另外静态库有更新的话,需要重新静态编译整个项目。

优点:相对于动态链接运行快。

动态链接(.dll):动态链接时每个模块不会加载动态库的内容,只保存一个地址,在运行时再将接口内容加载进内存进行执行。

优点:1.节约空间。2.库更新的话,不需要全部重新编译。

缺点:运行时会损失点效率。

相关推荐
zhuqiyua8 小时前
windows二进制安全零基础(二)
汇编·安全·二进制
白八实9 小时前
汇编代码中的主要指令笔记
汇编·jvm·笔记
非得登录才能看吗?9 小时前
汇编案例 之 HEX到ASCII码的转换
汇编·微机原理·8086
一只特立独行的程序猿1 天前
关于GCC内联汇编(也可以叫内嵌汇编)的简单学习
汇编·学习·gcc
染指11102 天前
45.第二阶段x86游戏实战2-hook监控实时抓取游戏lua
汇编·c++·windows·反游戏外挂·游戏逆向
ARM&开发(Haidong)3 天前
ARM 汇编指令
汇编
CYRUS STUDIO3 天前
Android 下内联汇编,Android Studio 汇编开发
android·汇编·arm开发·android studio·arm
我不是程序猿儿4 天前
【数据结构】汇编 、机器语言 高级语言 简析。
汇编·机器语言·高级语言
zhuqiyua4 天前
c文件的编译,汇编,基础知识
c语言·汇编·算法
CYRUS STUDIO6 天前
Android下的系统调用 (syscall),内联汇编syscall
android·linux·汇编·arm开发·arm·内联汇编