了解在Linux下可执行文件格式.doc
《了解在Linux下可执行文件格式.doc》由会员分享,可在线阅读,更多相关《了解在Linux下可执行文件格式.doc(5页珍藏版)》请在三一文库上搜索。
1、了解在Linux下可执行文件格式Linux下面,目标文件、共享对象文件、可执行文件都是使用ELF文件格式来存储的。程序经过编译之后会输出目标文件,然后经过链接可以产生可执行文件或者共享对象文件。linux下面使用的ELF文件和Windows操作系统使用的PE文件都是从Unix系统的COFF文件格式演化来的。我们先来了解一些基本的想法。首先,最重要的思路是一个程序从人能读懂的格式转换为供操作系统执行的二进制格式之后,代码和数据是分开存放的,之所以这样设计有这么几个原因:1、程序执行之后,代码和数据可以被映射到不同属性的虚拟内存中。因为代码一般是只读的,而数据是可读可写的;2、现代CPU有强大的缓
2、存体系。程序和代码分离可以提高程序的局部性,增加缓存命中的概率;3、还有最重要的一个原因是当有多个程序副本在运行的时候,只读部分可以只在内存中保留一份,这样大大节省了内存。在ELF的定义中,把他们分开存放的地方称为一个 Section ,就是一个段。一个ELF文件中重要的段包括:.text 段:存储 只读程序.data 段:存储 已经初始化的全局变量和静态变量.bss 段:存储 未初始化的全局变量和静态变量,因为这些变量的值为0,所以这个段在文件当中不占据空间.rodata 段:存储 只读数据,比如字符串常量我们用一个例子来看一下ELF文件的格式到底是什么。首先,在Linux下编写一个C程序:
3、SimpleSecTIon.ccppview plaincopyintprintf(constchar*format,.);intglobal_init_var=16;intglobal_unint_var;voidfunc1(int);intmain()staTIcintstaTIc_var=-32;staTIcintstatic_var_uninit;inta=1;intb;func1(static_var+global_init_var+a+b);returna;voidfunc1(inti)printf(%dn,i);然后,产生目标文件:cppview plaincopyrootxux
4、ingwang-centosProgram#gcc-cSimpleSection.crootxuxingwang-centosProgram#fileSimpleSection.oSimpleSection.o:ELF32-bitLSBrelocatable,Intel80386,version1(SYSV),notstrippedfile命令的结果也告诉我们,这是一个32位ELF的文件,类型是 relocatable ,就是可重定位。所以目标文件又叫做可重定位文件。elf文件的最开始是elf文件头信息,32位有52个字节组成。我们可以使用 readelf 工具来查看一下:cppview pl
5、aincopyrootxuxingwang-centosProgram#readelf-hSimpleSection.oELFHeader:Magic:7f454c46010101000000000000000000Class:ELF32Data:2scomplement,littleendianVersion:1(current)OS/ABI:UNIX-SystemVABIVersion:0Type:REL(Relocatablefile)Machine:Intel80386Version:0x1Entrypointaddress:0x0Startofprogramheaders:0(byt
6、esintofile)Startofsectionheaders:224(bytesintofile)Flags:0x0Sizeofthisheader:52(bytes)Sizeofprogramheaders:0(bytes)Numberofprogramheaders:0Sizeofsectionheaders:40(bytes)Numberofsectionheaders:11Sectionheaderstringtableindex:8Entry point address 指的是程序入口地址,如果是可执行文件,这个字段会有值;他之前的字段是一些说明字段;Start of progr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 了解 Linux 可执行 文件格式
链接地址:https://www.31doc.com/p-3371987.html