微内核系统直接加载ELF文件机制的设计与研究_第1页
微内核系统直接加载ELF文件机制的设计与研究_第2页
微内核系统直接加载ELF文件机制的设计与研究_第3页
微内核系统直接加载ELF文件机制的设计与研究_第4页
微内核系统直接加载ELF文件机制的设计与研究_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中图分类号:TP316 文献标识码:A 文章编号:1009-2552(200910-0073-04微内核系统直接加载ELF文件机制的设计与研究王婧怡,应忍冬,周玲玲(上海交通大学电子工程系,上海200240摘 要:讨论在微内核环境下直接加载运行Linux的ELF文件的方法。通过分析ELF文件格式特点,提出了在L4 Fiasco微内核操作系统上直接加载的方案,从而使Linux下的ELF文件能够跨平台执行。同时利用微内核的隔离性,把指定的E LF程序和其他程序模块隔离开,实现程序的安全运行。关键词:微内核;ELF;跨平台操作Design and research of running ELF fi

2、lebased on microkernel systemW ANG Jing yi,YING Ren dong,ZHOU Ling ling(Department of Electronic Engineering,Shanghai Jiaotong University,Shanghai200240,China Abstract:This paper discusses about running ELF format file of Linux directly on microkernel system.It analyses the features of ELF format,an

3、d presents the method of directly loading it on L4 Fiasc o microkernel system.This architec ture can imple ment ELF format program on cross platform.With the character of isolation,the ELF format program is isolated from other programs,which can provide safety to the microkernel system.Key w ords:mi

4、crokernel system;ELF format;cross platform0 引言L4 Fiasco是第二代微内核操作系统的代表,其独特的架构要求所有模块的运行均需在特定的环境中进行编译,这影响了简单程序的跨平台运行。本文提出的方法是通过对于ELF格式可执行文件的解析,提炼出E LF格式文件运行的关键信息,将其以二进制数组的形式传递给在微内核开发环境中已编译生成的可执行文件模块,使该模块能在不重新编译的情况下运行原文件。这一运行模式能够将Linux下的指定程序的运行和L4 Fiasco下其他程序模块隔离开来实现软件的安全保护,此外这种运行的架构能够大大扩展现有微内核操作系统L4 Fi

5、asco 的程序资源,使L4 Fiasco能直接运行Linux上编译的文件,成为高性能微内核系统。1 ELF格式文件介绍UNIX LI NUX平台下可执行文件主要有三种格式:a.out、C OFF和E LF。其中ELF格式的可执行文件被广泛使用。ELF格式文件的全称是Executable and Linkable Format,译为可执行连接格式,这是由UNIX系统实验室(USL作为应用程序二进制接口(Application binaray interface,ABI开发的,工具接口标准委员会(Tool Interface Standards,TIS选择了发展中的ELF标准作为工作在32位In

6、tel体系上不同操作系统之间可移植的二进制文件格式1。1.1 ELF的结构E LF格式文件有三个主要的表头,分别是ELF 文件头(ELF Header、ELF节表头(E LF Section Hea der Table和ELF段表头(E LF Program Header Table,以及多个节和段。E LF文件头指向ELF节头表和ELF段头表。E LF文件头通过一个结构体记录了ELF格式的文件收稿日期:2009-04-24作者简介:王婧怡(1985-,女,上海交通大学电子工程系硕士研究生,研究方向为微内核操作系统、嵌入式系统。73信息、目标文件类型、目标文件的结构、目标文件的当前版本号、可执

7、行文件执行时的入口地址、段头表节头表在文件中的偏移量、与特定的处理器有关的标志位、ELF文件头的大小、段头表节头表表项的大小数目、节名字符串表在节头表中的索引这些数据。其中可执行文件的入口地址也就是ELF32Addre Entry的数据即本文所讨论的函数执行中程序段(.text section的入口地址。对于每个节,在ELF节头表中都有一个表项与之对应。表项记录了该节的一些信息,如该节的节名、属性、属性标志以及该节在文件中的位置、偏移量、大小、索引连接、信息、对齐要求等。节是ELF 格式文件处理的最基本单位,ELF文件中的代码、连接信息以及注释都是以节为单元存放的。每个节都有自己的名称,如存放

8、指令的代码节.text、存放符号表节名的.symtab、和可重定位有关的.rel、和动态连接有关的.dyna mic等节。文中主要涉及的是和代码的程序段和与函数执行的数据有关的数据段。ELF段头表(E LF Program Header Table给出了这些段的类型、偏移地址、在进程映像中的虚地址、物理地址、在可执行目标文件中的大小、在内存中占据的大小以及与段相关的一些属性和对齐方式。段的结构是从加载器的视角而言的,段由几个节组成,节之间没有规律。在本文的研究中,没有详细分析段的组成。1.2 程序段落的内容简要介绍了ELF格式文件的结构之后,主要说明在本文的设计方法中提及的.text节、.da

9、ta节、.symtab节和.strtab节。.text节是只读代码区,其入口地址即ELF头文件中entry point所指向的内存地址,是程序的入口。程序的代码以及常量均放在.te xt中。.data是可读可写的数据区,存放变量信息。.symtab为符号表,.strtab 为字符串表。通过对于符号表链接信息的查找,能够由sh link查到相应的字符串表,由字符串表提供的详细内容最终找到所需要定位的信息内容。1.3 E LF格式文件加载机制的分析可执行文件E LF格式与共享库在结构上是非常相似的。对于可执行文件而言,段的加载位置是固定的,程序段表中如实反映了段的加载地址。而对于共享库而言,段的加

10、载地址是浮动的、位置无关的,程序段表反映的以0为基准地址的相对加载地址。在本文的设计架构中以可执行文件的静态连接方式为主要研究对象。尽管静态连接存在库中变量或函数有任何变化都必须重新编译连接程序以及浪费硬盘、内存空间的缺点,但是在执行速度快并且在跨平台运行时免除了共享库不同可能存在的隐患。采用静态连接方式的E LF格式文件在内核完成程序段的加载之后,直接启动用户程序的入口,也就是.text的main函数。2 L4 Fiasco跨平台运行Linux下ELF 格式文件的设计架构与执行2.1 平台环境L4是第二代微内核系统的代表,它是由德国国家信息技术研究院设计的。L4操作系统内核非常小,系统服务大

11、多在用户态的服务进程上完成,这些服务进程每个都有自己的地址空间,因而具有较高的安全性和较好的灵活性。本文所研究的是专门为实时系统所设计的Fiasc o内核,下文称为L4 Fiasco2。文本架构设计的环境是L4 Fiasco微内核的用户态环境(L4Env。L4Env是Dresden Real Time Operating System(DROPS的一部分,它是德国的Dresden大学研发的编程环境,为L4微内核的顶层开发提供了一个统一接口。在L4Env出现之前,原有的L4应用程序的开发者对于编程环境(如库文件、接口等都有自己独创的一套,这对于试图调用另一编程者的程序造成了困难。而L4Env的诞

12、生正好解决了这个问题。在微内核系统中,L4Env是由一组管理基本系统资源的L4模块组成。L4Env的模块和库包含了许多开发工具,有内存管理的D Mphys、l4rm,线程,进程间通信(Inter Process Com munication,以下简称IPC,关于同步机制的se ma phore、lock,涉及I O平台的con、log,初始化应用程序loader、e xec、tftp,进程相关的simple ts、同I O资源相关的l4io等及DICE IDL编译器3。本文所讨论的E LF文件运行的客户端 服务器端模块设计就是基于L4Env的开发环境所搭建的。2.2 平台设计架构在平台架构的设

13、计上,必须基于L4的核心概念的考量,即L4V2 API的地址空间、线程和IPC4。其中地址空间这个概念的提出是对于域的保护,不同的地址空间意味着用户态中应用程序间的相互隔离,对于资源的调用也是在给定的地址空间中进行的。在L4V2 API中,地址空间由一组线程组成,因此本文中的地址空间和进程的概念相近。线程是在调度模型中时间片的实体,它同时也充当着对点通信的功能。本架构的设计是相对快速简单的IPC传输,因此不需要在地址空间中创建新线程。IPC是线程跨地址空间的同步和通信的机制,74也是本文设计的核心思想之一。IPC 的运行是同步的,它要求发送端和接受端在传输信息之前获得同步点5。线程之间的通讯可

14、以包括机器码、内存映射、机器码缓存、字符串缓存以及其他一些组合。IPC 是L4的系统调用函数,一般以L4ipc 开头,作用分别是:管理通讯、发送、接受、等待、回复与等待、调用。在本文的设计中,运用的核心就是基于IPC 的客户端 服务器端模型。本文设计的跨平台架构首先是对Linux 下编译生成的ELF 格式文件进行处理,将程序运行所必须的.text 、.data 的内容以及相对地址提取出来,复制给L4 Fiasco 的客户端。再在L4 Fiasco 客户端,通过L4 Fiasco 的IPC 机制将这些数据传输给服务器端,最终在服务器端完成运行。依靠IPC 获得客户端传递的ELF 的二进制数组信息

15、,完成了在服务器端无须重新编译就能跨平台运行Linux 的ELF 格式文件的目的。2.3 执行过程如图1所示,本文将执行过程分为两部分。第一部分为ELF 格式解析,第二部分为L4模块之间消息的传递。 图1 程序执行流程图(1E LF 格式解析对于E LF 格式的文件,本文中需要解析得到的包括两方面的内容,首先是函数执行程序段中的main 函数入口和终止点,以及main 函数中和.data 有关的内容;其次是数据调用时的相对地址。本文采取自动检索的方法得到main 函数的入口地址,并将.test 作为unsigned char 的数组保存。方法是通过对于头文件中所有E LF 节的遍历,找到符号表

16、(.symtab,然后由该表项的shlink 连接到对应的字符串表(.strtab,并读入。通过遍历整个符号表,将字符串为 main 的值(内存地址读出,即所得到的入口地址。然后以空指令 nop (二进制0x90为结束标记,得到整个main 函数的程序代码的二进制数组表达形式。对于.data 以及相对地址的处理,本文通过E LF 格式的解析手动获得相关数据。(2L4模块之间的消息传递如上文所述,L4中模块的消息传递依靠IPC 完成。本文建立了一个客户端 服务器端的模块,由客户端(即发送端提供E LF 格式的实质信息,通过IPC 传递给服务器端(即接收端,并在服务器端中运行。在消息被发送端发送之

17、前,发送端和接收端必须达成协议使用IPC,这和 握手协议 的概念相近。可能出现接收端没有立刻准备好接受从发送端送达的信息,这时,发送端会被加载到接收端的等待列表中。图2列举了四种L4常用的通讯机制,方法一是将发送者的传递内容复制到接收者的缓存中,然后经由缓存复制到接收者的内存中。这种方法最为便捷但是效率最低。第二种方法是共享内存的方式,存在安全性低的问题。第三种方法将发送者传递的信息复制到共享内存中和接收者共享,是最常用也是相对于安全性和效率最为平衡的方法。第四种方法是接收者直接将传递信息的物理地址告知接收者,这种方法速度最快但是安全性差。图2 L4中的通讯方式本文采用的是第三种传递方法,首先

18、在用户端通过l4snd fpage t 的数据结构建立一个大小和基地址已知的共享内存区域,把E LF 的二进制数组复制到内存区域中,并由l4ipc send 将内存区域的相关信息发送。在服务器端,通过l4ipc wait得到共享区域的信息内容。另外一部分有关于相对地址的数据信息,由于内容较少,通过short IPC 的方式,直接将数据经由dw0(EDX和dw1(EBX传递,75效率更高。最终将用户端和服务器端同时加载运行,服务器端得到用户端传递的ELF 数组代码,完成程序的执行。3 性能分析通过本文设计的架构,Linux 的应用程序能够无需在L4Env 环境中编译就直接运行于L4 Fiasco

19、 。由于本设计是对于ELF 格式中二进制汇编语言的直接提炼,并没有引入误差因子,因此安全性能并未降低。图3调用一个循环程序在QE MU 虚拟机(内存大小为1024M中的Linux 以及L4 Fiasco 环境中运行,说明了同样的程序在不同环境中运行时的时间消耗情况。 图3 L4 Fisaco 以及Linux 下程序运行速度对比从图3的数据中可以得出结论,程序在L4 Fiasc o 中运行的速度远优于在Linux 下的执行速度。分析主要原因是Linux 下的数据需要各种不同的系统调用,执行效率严重受到影响。而L4 Fiasco 中的数据执行没有涉及底层系统调用,它在单独地址空间内作为独立进程运行

20、,其运行时间约为Linux 的5%10%。L4 Fiasco 的ELF 程序执行速度较快,且安全性并未降低,因此是一种适用的方式。4 结束语本文对于Linux 的E LF 格式进行分析,通过解析ELF 格式中部分信息并将其放入L4 Fiasco 的客户端 服务器模型的客户端,由客户端通过IPC 向服务器端发送E LF 信息,最终使得L4 Fiasco 的服务器端能跨平台运行Linux 应用程序。这种方法在跨平台的基础上,并不降低代码的安全性,且有效地隔离了用户端和服务器端的地址空间,扩展了程序资源。最终优化了L4 Fiasco 的性能。使其成为跨平台的高性能微内核系统。参考文献:1 Tool

21、Interface Standard (TIS Executable and Linki ng Format (ELFSpecification Version 1.2S.TIS Committee,M ay 1995,1-11-22.2 L4 Faisco Team EB O L .http: os.i nf.tu dresden.de fiasco doc.html.3 L4Env.An Envirenoment for L4Applications M .Operating SystemsResearch Group Technique Universi ty D resden,June 30,2003:2.4 Mul tiprocessor Support for the Fiasco M icrokernelD.Sven Schneider,Jan.8,2006:11-13.5 Verification of Fiasco s IPC i mple mentationD.E.G.H Sc hierboom,June.21,2007:28-29.责任编辑:么丽苹(上接第

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论