Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1071597
  • 博文数量: 277
  • 博客积分: 8313
  • 博客等级: 中将
  • 技术积分: 2976
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-22 11:25
文章分类

全部博文(277)

文章存档

2013年(17)

2012年(66)

2011年(104)

2010年(90)

我的朋友

分类: LINUX

2011-03-26 10:50:25

在linux或者unix系统中,所有的东西都被视为文件,因此可以认为她们都是由不同的文件构成的(可以这么说吧,linux或者unix是一个文件集合,这只是个人的看法),因此可以说linux或者unix编程就是为了处理文件,如何高效的处理文件,而 elf(executable linking and format),可执行二进制文件,则是其中的一种。目前她是linux或者unix的标准可执行二进制文件格式。

为了更好的了解她,下面先介绍几个小软件:第一个登场的是readelf,她由Eric Youngdale 所写,作者也是为了了解elf而写了这个小工具,readelf显示一个或多个elf格式的目标文件信息,还可以反汇编(具体看手册),可通过各种参数选项来控制显示目标文件的特定信息;第二个则是nm,主要功能是列出目标文件中的符号,这样可以帮助程序员定位和分析程序和目标文件中的符号信息;还有就是objdump显示文件的特定信息,ar用于创建、修改、提取归档文件,objcopy转换文件格式(只能是BFD库中所描述的文件格式)。工具描述告一段落。

现在我们以一个简单的hello world程序开始下面的旅程(上C语言课上的第一个程序,应该记得吧)。gcc 编译生成一个标准的可执行文件,接着readelf -a yourfilename。阿呀,怎么这么多东西?确实有点恐怖(因为内容过于丰富,这里就不展示了)。所以找到了一种更直接的方式,去看elf文件的定义(在/usr/include/elf.h中有elf的更详细的结构定义,或者你也可以man elf,linux自身附带的文档也是很丰富的)。

以上是自己了解elf的一些方法,下面介绍对elf文件的一些了解。

首先是elf文件的头部(用readelf -h filename,就能看到elf文件头信息)
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0x80482f0
Start of program headers: 52 (bytes into file)
Start of section headers: 3220 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 7
Size of section headers: 40 (bytes)
Number of section headers: 36
Section header string table index: 33

Magic字段用16字节来明确定义这一个elf文件,换句话说,Magic对于elf文件是唯一的。Class这标明这是哪种elf文件(其实elf文件还可分为 elf32-i386、elf32-little、elf32-big、elf64-x86-64、elf64-little、elf64-big),可真多,所以我也只是对她们略知一二,应该是很少了。剩下的信息理解应该是没什么问题了,这里就不废话了。还有些如符号链接,程序断,入口地址,以及程序使用了哪些库,她们的物理地址和虚拟地址如何安排等信息,用readelf就能一探究竟了。我不想把这篇作为深入理解elf文件的文章,再说我暂时也没那能力。因为最近有些东西要用到,所以只是作为自身够用的原则。

下面介绍一些了解elf文件过程中找到的一些材料:首当其冲的是:

,这篇文章描述了作者如何在了解elf文件的情况下,把一个可执行的elf文件从 3998字节疯狂的减到42字节,牛啊!

其二是:,这篇文章是readelf的作者所些的,应该有些参考价值

,教你如何用readelf和objdump一步步了解elf文件

。如果想深入了解elf文件的上面的资料应该够入门了,哈哈!就先这样了。

阅读(2382) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~