- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
可执行文件格式UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assemblerand link editor output汇编器和链接编辑器的输出)、COFF(Common Object File Format 通用对象文件格式)、ELF(Executableand 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){……}?其中函数名为任意。8:动态连接器把控制传递给程序,从 ELF 文件头部中定义的程序进入点开始执行。在 a.out 格式和ELF格式中,程序进入点的值是显式存在的,在 COFF 格式中则是由规范隐含定义。从上面的描述可以看出,加载文件最重要的是完成两件事情:加载程序段和数据段到内存;进行外部定义符号的重定位。重定位是程序连接中一个重要概念。我们知道,一个可执行程序通常是由一个含有 main() 的主程序文件、若干目标文件、若干共享库(SharedLibraries)组成。(注:采用一些特别的技巧,也可编写没有 main 函数的程序,请参阅参考资料 2)一个 C程序可能引用共享库定义的变量或函数,换句话说就是程序运行时必须知道这些变量/函数的地址。在静态连接中,程序所有需要使用的外部定义都完全包含在可执行程序中,而动态连接则只在可执行文件中设置相关外部定义的一些引用信息,真正的重定位是在程序运行之时。静态连接方式有两个大问题:如果库中变量或函数有任何变化都必须重新编译连接程序;如果多个程序引
您可能关注的文档
- 古代文人及其作品大全.doc
- 古代文学史复习资料.doc
- 古代文学整理名词解释.doc
- 古代汉语——古书的特殊表达方式.doc
- 古代汉语考试复习题.doc
- 古代著名诗人作家的名人字号.doc
- 古代诗歌常用的写景手法之动静结合.doc
- 古代诗歌鉴赏方法总结.doc
- 古代诗词鉴赏技法指导与训练之“形象” (2).doc
- 古代酒文化带给中学语文教学的思考.doc
- 2025江苏洪泽经济开发区投资控股集团有限公司招聘9人笔试备考试题附答案详解(名师推荐).docx
- 2025广东佛山市南海区殡仪馆招聘编外工作人员3人考试备考题库含答案详解(巩固).docx
- 2025广东东莞市中堂实业控股集团有限公司招聘6人笔试备考题库附答案详解(基础题).docx
- 2025年福建省福州左海控股集团有限公司招聘2人笔试备考题库及答案详解(精选题).docx
- 2025济南市章丘区殡仪馆工作人员招考(20人)笔试备考题库含答案详解(综合题).docx
- 2025江苏盐城市银宝控股集团有限公司招聘41人考试备考题库含答案详解(考试直接用).docx
- 2025年安徽横望控股集团有限公司招聘1人笔试备考题库及答案详解(典优).docx
- 2025杭州青少年活动中心招聘工勤岗位工作人员20人笔试备考题库含答案详解(能力提升).docx
- 2025江苏南通市瑞海投资控股集团有限公司招聘9人考试备考题库附答案详解(培优b卷).docx
- 2025年济南市章丘区教育和体育局所属学校公开招聘人员(16人)笔试参考题库及答案详解(名校卷).docx
最近下载
- 《航空发动机维修技术》——课件:航空发动机维修.pptx VIP
- 2022年职业教育国家级教学成果奖申报书《基于师范性和技术性融合的职技高师人才培养体系研究与实践》.pdf VIP
- 雅培血气分析仪的使用.ppt VIP
- 第一课 学习有益也有趣(教案)小学心理健康五年级上册(人教版).pdf
- JJF 2155-2024 检验医学标准物质互换性评估要求.docx VIP
- PPG涂装技术手册-P61.pdf VIP
- 未成年人出游免责协议书5篇.docx VIP
- 纪念抗日战争胜利80周年弘扬抗战精神爱国主义教育ppt课件.pptx VIP
- 色盲检测图(俞自萍第六版).docx VIP
- 命题技术与命题规范要求.ppt
文档评论(0)