UNIX/LINUX 平台可执行文件格式分析
本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link editor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format 通用对象文件格式)、ELF(Executable and Linking Format 可执行和链接格式). 可执行文件格式综述 相对于其它文件类型,可执行文件可能是一个操作系统中最重要的文件类型, 不管何种可执行文件格式,一些基本的要素是 相对可执行文件有三个重要的概念:编译(compile)、连接(link,也可称为链接、联接)、加载(load).源程序文件被编译成目标文件,多个目标文件被连接成一个最终的可执行文件,可执行文件被加载到内存中运行. 1:内核 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) { …… } 其中函数名为任意. 从 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |