程序编译-汇编-链接的理解!

本文深入探讨程序编译、汇编和链接的过程,涉及重定位、虚拟内存、静态与动态链接的概念。通过理解链接的本质——合并目标文件中的代码和数据节,形成可执行文件。在Linux环境下,详细阐述了ELF文件结构及地址空间布局,包括代码段、数据段、栈、共享库和堆等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:

对于程序编译汇编链接过程的理解。
涉及到程序的重定位,虚拟内存,静态链接,动态链接的概念的理解。

早期程序员采用的是机器语言的编写程序。非常的麻烦。
后来采用汇编语言编写,将一些操作采用符号的方式,用符号的方式表示一些操作和跳转的位置。
无需在写程序的时候知道具体要跳转的位置,用符号表示就可以。
这里写图片描述
在链接时在对应的符号的引用处填入定义的地址!!
确定符号引用关系也就是符号的解析!
这里写图片描述
多个程序链接的时候,将代码合并,将数据合并,这些合并是分开的,最终得到的是一个合并的新的程序,将这个程序存放在虚拟地址空间。
重定位就是:确定每个符号的新地址(虚拟地址),并且在指令当中填入对应的地址。

链接的本质:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值