窥探目标文件

源文件如何变成可执行文件

CPU只能执行二进制指令,无法执行用户直接编写的源代码,因此在IDE中简单地一键运行背后一定隐藏了一套复杂的转换过程。这个过程分为2步,编译+链接

编译

编译负责将各个编译单元转换成目标文件

这里的编译是一个笼统的说法,编译具体可以划分为预处理+编译+汇编三个步骤,这个过程需要编译器和汇编器的介入,预处理后的.i文件仍然是一个源文件,编译后的.s为汇编文件,汇编后的.o是一个二进制文件(即目标文件),目标文件非常重要,它是参与后续链接的基本单元

链接

链接负责将各个目标文件合并成一个可执行文件

链接过程中会进行对全局变量,全局函数的地址修正(重定位),每一个需要被重定位的地方称为重定位入口,只有经过重定位后才正确地执行程序
在这里插入图片描述

目标文件格式

若想了解链接就必须了解目标文件,Linux下的目标文件遵循Executable Linkable Format(ELF)文件格式,除此之外,可执行文件、核心转储文件、共享对象文件也遵循ELF文件格式

在这里插入图片描述

ELF文件格式

ELF文件格式最大的特点就是按节(section)编排,粗略得看ELF文件自底向上分别是文件头、代码节(.text)、已初始化数据节(.data)、未初始化数据节(.bss),当然除此之外还有很多辅助节存在

/*test.c*/
int a;	//.bss
int b=1; //.data
int main(){
    //.text
	return 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tsunami——

你的鼓励将是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值