分享

一步步编写操作系统44elf格式的二进制可执行程序1(linux下可执行文件格式是ELF)

 山峰云绕 2019-07-01

   (linux下可执行文件格式是ELF)



【【郑大刚子】一步步编写操作系统 44 elf格式的二进制可执行程序1】https://toutiao.com/group/6708647408147890699/?app=explore_article&timestamp=1561995982&req_id=20190701234622010152016159498A0FC&group_id=6708647408147890699&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share 






一开始我就在想,如何将此elf文件格式讲清楚,回想起我们在上大学的时候,操作系统课程的老师一般都是这样介绍ELF的:window下的可执行文件格式是PE(如果您想说的是EXE,不要搞混了,EXE是扩展名,属于文件名的一部分,只是名字的后缀,它并不是真正的格式),PE即Portable Executable,linux下可执行文件格式是ELF。一般只是通过这样简单的对比来认识elf格式,这充其量算是个简介,根本谈不上详实。我想,那时的我们很少有人能从课堂上明白ELF文件格式的本质。本文中不再重蹈覆辙,咱们不求深入剖析,也要采取“浅析”的方式来阐述。

ELF指的是Executable and Linkable Format,可执行链接格式。最初是由UNIX系统实验室(USL)做为应用程序二进制接口(ABI)而开发和发行的。工具接口标准委员会(TIS)选择了它做为IA32体系结构上不同操作系统之间的可移植二进制文件格式,于是它就发展成为了事实上的二进制文件格式标准。历史咱就点到为止,还是以多说“干货”为主。

先跟大家交待下,在ELF规范中,把符合ELF格式协议的文件统称为“目标文件”或ELF文件,这与我们平时所说的目标文件是不同的。

在大家平时的习惯中,咱们把编译后、但未经链接的文件称为目标文件,也称为待重定位文件(relocatable file),比如在Linux下用gcc –c参数生成的.o文件。而平时我们所说的ELF文件也是指经过编译链接后的二进制可执行文件,该文件能够直接运行。

为了避免混淆,咱们采用与ELF规范相同的命名方式,本节中所说的目标文件即指各种类型符合ELF规范的文件,如二进制可执行文件和linux下.o结尾的目标文件和.so结尾的动态库文件。而待重定位文件,可以理解成咱们惯常所说的目标文件(如linux下的.o文件)。ELF目标文件归纳如下表:

为什么先给大家介绍这些,在后面大家就知道了,elf各种数据结构中牵扯到各种“类型”,已经了解的同学就忽略我吧,这是给那些没接触过此方面的同学准备的,先让大家有个感性认识。

本来我想和大家提前约定一下本文所用到的术语风格,其实我想一律用英文单词,但担心大家如果某天翻看到中间某页,无法将英文解释对号入座,所以我尽量适时地穿插中英文同时标注。

【再续】

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多