快速业务通道

UNIX/LINUX 平台可执行文件格式分析

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-01
har s_lnnoptr[4]; /* 节行信息偏移量 */

  char s_nreloc[2]; /* 节重定位条目数 */

  char s_nlnno[2]; /* 节行信息条目数 */

  char s_flags[4]; /* 段标记 */

  };

  有一点需要注意:LINUX系统中头文件coff.h中对字段s_paddr的注释是"physical address",但似乎应该理解为"节被加载到内存中所占用的空间长度".字段s_flags标记该节的类型,如文本段、数据段、BSS段等.在 COFF的节中也出现了行信息,行信息描述了二进制代码与源代码的行号之间的对映关系,在调试时很有用. 拥有帝国一切,皆有可能。欢迎访问phome.net


ELF文件格式分析

  ELF 文件有三种类型:可重定位文件:也就是通常称的目标文件,后缀为.o.共享文件:也就是通常称的库文件,后缀为.so.可执行文件:本文主要讨论的文件格式,总的来说,可执行文件的格式与上述两种文件的格式之间的区别主要在于观察的角度不同:一种称为连接视图(Linking View),一种称为执行视图(Execution View).

  看看ELF文件的总体布局:

  ELF header(ELF头部)

  Program header table(程序头表)

  Segment1(段1)

  Segment2(段2)

  ………

  Sengmentn(段n)

  Setion header table(节头表,可选)

  段由若干个节(Section)构成,节头表对每一个节的信息有相关描述.对可执行程序而言,节头表是可选的.参考资料 1中作者谈到把节头表的所有数据全部设置为0,程序也能正确运行!ELF头部是一个关于本文件的路线图(road map),从总体上描述文件的结构.下面是ELF头部的数据结构:

  typedef struct

  {

  unsigned char e_ident[EI_NIDENT]; /* 魔数和相关信息 */

  Elf32_Half e_type; /* 目标文件类型 */

  Elf32_Half e_machine; /* 硬件体系 */

  Elf32_Word e_version; /* 目标文件版本 */

  Elf32_Addr e_entry; /* 程序进入点 */

  Elf32_Off e_phoff; /* 程序头部偏移量 */

  Elf32_Off e_shoff; /* 节头部偏移量 */

  Elf32_Word e_flags; /* 处理器特定标志 */

  Elf32_Half e_ehsize; /* ELF头部长度 */

  Elf32_Half e_phentsize; /* 程序头部中一个条目的长度 */

  Elf32_Half e_phnum; /* 程序头部条目个数 */

  Elf32_Half e_shentsize; /* 节头部中一个条目的长度 */

  Elf32_Half e_shnum; /* 节头部条目个数 */

  Elf32_Half e_shstrndx; /* 节头部字符表索引 */

  } Elf32_Ehdr;


e_ident [0]-e_ident[3]包含了ELF文件的魔数,依次是0x7f、''E''、''L''、''F''.注意,任何一个ELF 文件包含此魔数.参考资料 3中讨论了利用程序、工具、/Proc文件系统等多种查看ELF魔数的方法.e_ident[4]表示硬件系统的位数,1代表32位,2代表64位. e_ident[5] 表示数据编码方式,1代表小印第安排序(最大有意义的字节占有最低的地址),2代表大印第安排序(最大有意义的字节占有最高的地址).e_ident [6]指定ELF头部的版本,当前为1.e_ident[7]到e_ident[14]是填充符,通常是0.ELF格式规范中定义这几个字节是被忽略的,但实际上是这几个字节完全可以可被利用.如病毒Lin/Glaurung.676/666(参考资料 1)设置 e_ident[7]为0x21,表示本文件已被感染;或者存放可执行代码(参考资料 2).ELF头部中大多数字段都是对子头部数据的描述,其意义相对比较简单.值得注意的是某些病毒可能修改字段e_entry(程序进入点)的值,以指向病毒代码,例如上面提到的病毒Lin/Glaurung.676/666. 拥有帝国一切,皆有可能。欢迎访问phome.net

  [29] .debug_frame PROGBITS 00000000 002d18 000048 00 0 0 4

  [30] .debug_str PROGBITS 00000000 002d60 000bcd 01 MS 0 0 1

  [31] .shstrtab STRTAB 00000000 00392d 00012

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号