加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux/Unix平台可执行文件格式分析

发布时间:2016-01-26 08:35:52 所属栏目:Linux 来源:网络整理
导读:简介:本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out( assembler and link editor output 汇编器和链接编辑器的输出)、COFF (Common Object

字段 magic 为 0413 时表示 COFF 文件是可执行的,注意到可选头部中显式 定义了程序进入点,标准的 COFF 文件没有明确的定义程序进入点的值,通常是 从 .text 节开始执行,但这种设计并不好。

前面我们提到,COFF 格式比 a.out 格式多了一个节段表,一个节头条目描 述一个节数据的细节,因此 COFF 格式能包含更多的节,或者说可以根据实际需 要,增加特定的节,具体表现在 COFF 格式本身的定义以及稍早提及的 COFF 格 式扩展。我个人认为,节段表的出现可能是 COFF 格式相对 a.out 格式最大的 进步。下面我们将简单描述 COFF 文件中节的数据结构,因为节的意义更多体现 在程序的编译和连接上,所以本文不对其做更多的描述。此外,ELF 格式和 COFF格式对节的定义非常相似,在随后的 ELF 格式分析中,我们将省略相关讨 论。

struct COFF_scnhdr
{
   char s_name[8];   /* 节名称 */
   char s_paddr[4];  /* 物理地址 */
  char s_vaddr[4];  /* 虚拟地址 */
   char s_size[4];   /* 节长度 */
  char s_scnptr[4];  /* 节数据相对文件的偏移量 */
   char s_relptr[4];  /* 节重定位信息偏移量 */
   char 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的节 中也出现了行信息,行信息描述了二进制代码与源代码的行号之间的对映关系, 在调试时很有用。

参考资料 19是一份对COFF格式详细描述的中文资料,更详细的内容请参阅参 考资料 20。

ELF文件格式分析

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读