程序的构成之三

   (接上文)

   第四种补充情况,所有段都加载吗?

   继续回到可执行文件中,除了上述实实在在需要参与运行的辅助段外,可执行文件中还存在一些non-Allocable的段,它们只是被链接器、调试器或者其他类似工具所使用,而并非参与进程的实际运行。比如字符串表.strtab,符号表 .symtab等等。当运行最后的可执行程序时,加载器会加载那些Allocable的部分,而non-Allocable的部分则会被继续留在可执行文件内。所以,实际上,这些 non-Allocable 的段都可以被我们用strip工具从最后的可执行文件中删除掉。删除掉这些段的可执行文件照样能够运行,只不过不方便调试罢了。

   以上,就是动态库实现的细节。

   经过一段繁杂冗长的旅程后,终于,高级语言代码,变成了可执行文件。到此,也是时候将上述内容综合一下,整体展示一个可执行文件的格式了,如下图:

 

   初步看,还是比较复杂的。不过,从前述内容中,我们也可以看出,虽然可执行文件有这么多段,但是各个数据段的存在都是有道理的,是为了解决具体问题而存在的。总之,不论可执行文件格式如何复杂,它都是为程序加载执行服务的。

   二 具体的例子

   具体到Linux和Windows,分别展示一个实际的可执行文件格式并加以说明。待补充。

   三 进一步理解编译

   了解了可执行文件的内容后,抛开它,从逻辑的角度再来深入理解编译。可能有人同我有同样的困惑。

   这部分内容单独提了出来,参见:

   https://blog.csdn.net/wwwyue1985/article/details/119510675

   至此,我们的规则就构建完成了,也算是完成了程序的静态视图。如此构造的可执行文件,运行时又是什么样子的呢,会不会和文件格式一样呢?这就是程序动态视图的问题。我们在下一部分专门来介绍。

   这是一个从静态到动态的转变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

龙赤子

你的小小鼓励助我翻山越岭

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

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

打赏作者

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

抵扣说明:

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

余额充值