加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux/Unix平台可执行文件格式分析

发布时间:2016-01-26 08:35:52 所属栏目:Linux 来源:网络整理
导读:简介:本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out( assembler and link editor output 汇编器和链接编辑器的输出)、COFF (Common Object
副标题[/!--empirenews.page--]

简介:本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out( assembler and link editor output 汇编器和链接编辑器的输出)、COFF (Common Object File Format 通用对象文件格式)、ELF(Executable and Linking Format 可执行和链接格式)。首先是对可执行文件格式的一个综述, 并通过描述 ELF 文件加载过程以揭示可执行文件内容与加载运行操作之间的关 系。随后依此讨论了此三种文件格式,并着重讨论 ELF 文件的动态连接机制, 其间也穿插了对各种文件格式优缺点的评价。最后对三种可执行文件格式有一个 简单总结,并提出作者对可文件格式评价的一些感想。

可执行文件格式综述

相对于其它文件类型,可执行文件可能是一个操作系统中最重要的文件类型 ,因为它们是完成操作的真正执行者。可执行文件的大小、运行速度、资源占用 情况以及可扩展性、可移植性等与文件格式的定义和文件加载过程紧密相关。研 究可执行文件的格式对编写高性能程序和一些黑客技术的运用都是非常有意义的 。

不管何种可执行文件格式,一些基本的要素是必须的,显而易见的,文件中 应包含代码和数据。因为文件可能引用外部文件定义的符号(变量和函数),因 此重定位信息和符号信息也是需要的。一些辅助信息是可选的,如调试信息、硬 件信息等。基本上任意一种可执行文件格式都是按区间保存上述信息,称为段( Segment)或节(Section)。不同的文件格式中段和节的含义可能有细微区别, 但根据上下文关系可以很清楚的理解,这不是关键问题。最后,可执行文件通常 都有一个文件头部以描述本文件的总体结构。

相对可执行文件有三个重要的概念:编译(compile)、连接(link,也可称 为链接、联接)、加载(load)。源程序文件被编译成目标文件,多个目标文件 被连接成一个最终的可执行文件,可执行文件被加载到内存中运行。因为本文重 点是讨论可执行文件格式,因此加载过程也相对重点讨论。下面是LINUX平台下 ELF文件加载过程的一个简单描述。

1:内核首先读ELF文件的头部,然后根据头部的数据指示分别读入各种数据 结构,找到标记为可加载(loadable)的段,并调用函数 mmap()把段内容加载 到内存中。在加载之前,内核把段的标记直接传递给 mmap(),段的标记指示该 段在内存中是否可读、可写,可执行。显然,文本段是只读可执行,而数据段是 可读可写。这种方式是利用了现代操作系统和处理器对内存的保护功能。著名的 Shellcode(参考资料 17)的编写技巧则是突破此保护功能的一个实际例子。

2:内核分析出ELF文件标记为 PT_INTERP 的段中所对应的动态连接器名称, 并加载动态连接器。现代 LINUX 系统的动态连接器通常是 /lib/ld-linux.so.2 ,相关细节在后面有详细描述。

3:内核在新进程的堆栈中设置一些标记-值对,以指示动态连接器的相关操 作。

4:内核把控制传递给动态连接器。

5:动态连接器检查程序对外部文件(共享库)的依赖性,并在需要时对其进 行加载。

6:动态连接器对程序的外部引用进行重定位,通俗的讲,就是告诉程序其引 用的外部变量/函数的地址,此地址位于共享库被加载在内存的区间内。动态连 接还有一个延迟(Lazy)定位的特性,即只在"真正"需要引用符号时才重定位, 这对提高程序运行效率有极大帮助。

7:动态连接器执行在ELF文件中标记为 .init 的节的代码,进行程序运行的 初始化。在早期系统中,初始化代码对应函数 _init(void)(函数名强制固定), 在现代系统中,则对应形式为

void
__attribute((constructor))
init_function(void)
{
……
}

其中函数名为任意。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读