linux df 命令详解 简单认识认识ELF文件_第1页
linux df 命令详解 简单认识认识ELF文件_第2页
linux df 命令详解 简单认识认识ELF文件_第3页
linux df 命令详解 简单认识认识ELF文件_第4页
linux df 命令详解 简单认识认识ELF文件_第5页
全文预览已结束

下载本文档

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

文档简介

第第页linuxdf命令详解简单认识认识ELF文件

几种常见的ELF文件在Linux下,我们经gcc编译之后生成的可执行文件属于ELF文件:

ELF是一类文件类型,而不是特指某一后缀的文件。ELF(ExecutableandLinkableFormat,可执行与可链接格式)文件格式,在Linux下主要有如下三种文件:

可执行文件(.out):ExecutableFile,包含代码和数据,是可以直接运行的程序。其代码和数据都有固定的地址(或相对于基地址的偏移),系统可根据这些地址信息把程序加载到内存执行。可重定位文件(.o文件):Relocatablefile,包含基础代码和数据,但它的代码及数据都没有指定绝对地址,因此它适合于与其他目标文件链接来创建可执行文件或者共享目标文件。共享目标文件(.so):SharedObjectFile,也称动态库文件,包含了代码和数据,这些数据是在链接时被链接器(ld)和运行时动态链接器(ld.so.l、libc.so.l、ld-linux.so.l)使用的。ELF格式可结构大致为:

ELF文件由4部分组成,分别是ELF头(ELFheader)、程序头表(Programheadertable)、节(Section)和节头表(Sectionheadertable)。

实际上,一个文件中不一定包含全部内容,而且它们的位置也未必如同所示这样安排,只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。

readelf工具的使用在Linux下,我们可以使用readelf命令工具可以查看ELF格式文件的一些信息。下面我们先准备一个动态链接相关的demo,就拿我们之前分享的文章:========中的demo吧:

文件1(main.c):

#includetest.hintmain(void){print_hello();return0;}

文件2(test.c):

#includetest.h​voidprint_hello(void){printf(helloworld\n);}

文件3(test.h):

#ifndef__TEST_H#define__TEST_H​#includestdio.h​voidprint_hello(void);​#endif

执行相关命令生成相关文件:.out文件、.o文件、.so文件。如:

下面我们使用readelf命令来查看这三类文件的一些信息。readelf命令格式为:

readelfoption(s)elf-file(s)

查看可执行文件头部信息:

查看可执行文件头部信息是,我们发现这样一个问题,头部信息中的类型竟然是共享库文件,而我们查看的是可执行文件,自相矛盾?

查了一些资料:

/cclethe/article/details/83387685

发现:gcc编译默认加了--enable-default-pie选项:

Position-Independent-Executable是Binutils,glibc和gcc的一个功能,能用来创建介于共享库和通常可执行代码之间的代码–能像共享库一样可重分配地址的程序,这种程序必须连接到Scrt1.o。标准的可执行程序需要固定的地址,并且只有被装载到这个地址时,程序才能正确执行。PIE能使程序像共享库一样在主存任何位置装载,这需要将程序编译成位置无关,并链接为ELF共享对象。

引入PIE的原因是让程序能装载在随机的地址,通常情况下,内核都在固定的地址运行,如果能改用位置无关,那攻击者就很难借助系统中的可执行码实施攻击了。类似缓冲区溢出之类的攻击将无法实施。而且这种安全提升的代价很小。

也就是说,pie这是一种保护我们可执行程序的一种手段。这里我们只是做实验,我们可以加-no-pie参数先把pie给关掉:

可以看到,类型终于对得上了。ELF头部信息还包含有Entrypointaddress(入口地址)、Startofprogramheaders(程序头的起始字节)、Startofsectionheaders(节头的起始字节)等信息。

查看可重定位文件头部信息:

查看共享目标文件头部信息:

同样的,readelf搭配其它参数可以查看ELF文件的其它信息:

objdump工具的使用objdump工具用于显示一个或多个目标文件的信息。objdump命令格式:

objdumpoption(s)file(s)

可执行文件、可重定位文件与共享目标文件都属于目标文件,所以都可以使用这个命令来查看一些信息。

查看可重定位文件反汇编信息:

查看可执行文件反汇编信息:

查看共享目标文件反汇编信息:

总结以上就是本次的分享。简单地介绍了ELF文件的一些

温馨提示

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

评论

0/150

提交评论