注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

ELF(一)介绍  

2015-03-20 10:21:12|  分类: linux学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |



ELF文件

         其中引自<elf.h>,还包含<sys/elf.h>,<linux/elf.h>等,平时引用elf.h就可以了,如果做应用开发,而不是内核开发。

数据类型

         为了达到平台无关性,下面是内核定义的一些数据类型。

/* Type for a 16-bit quantity.  */

typedef uint16_t Elf32_Half;

typedef uint16_t Elf64_Half;

 

/* Types for signed and unsigned 32-bitquantities.  */

typedef uint32_t Elf32_Word;

typedef    int32_t  Elf32_Sword;

typedef uint32_t Elf64_Word;

typedef    int32_t  Elf64_Sword;

 

/* Types for signed and unsigned 64-bitquantities.  */

typedef uint64_t Elf32_Xword;

typedef    int64_t  Elf32_Sxword;

typedef uint64_t Elf64_Xword;

typedef    int64_t  Elf64_Sxword;

 

/* Type of addresses.  */

typedef uint32_t Elf32_Addr;

typedef uint64_t Elf64_Addr;

 

/* Type of file offsets.  */

typedef uint32_t Elf32_Off;

typedef uint64_t Elf64_Off;

 

/* Type for section indices, which are16-bit quantities.  */

typedef uint16_t Elf32_Section;

typedef uint16_t Elf64_Section;

 

/* Type for version symbolinformation.  */

typedef Elf32_Half Elf32_Versym;

typedef Elf64_Half Elf64_Versym;

ELF文件基本布局

ELF文件头

ELF文件头

 程序头表

程序头表

节1

段1

节2

段2

节……

段……

节n

段n

节头表

节头表

链接视图(.o)                      执行视图

灰底为可选,白底为强制

可重定位目标的节

.text    已编译程序的机器代码,主要的机器指令

.rodata  只读数据,如printf语句中的格式字串和开关语句的跳转表,不能修改,例如字符串

.data    已初始化的全局c变量。局部变量在运行时保存在栈中。例如预先初始化的结构,其中在编译时填充的静态数据。这数据可以在程序运行期间更改。

.bss     未初始化的全局变量。不占据空间。程序开始运行前填充0

.symtab  保存二进制的符号表,存放程序中定义和引用的函数和全局变量信息。不包含局部变量条目。

.rel.text  一个.text节中的位置列表,当链接器把这个目标文件和其他文件结合时需要修改这些位置

.rel.data 被模块引用和定义的任何全局变量的重定位信息。

.debug  一个调试表,加-g选项,包含局部变量,定义和引用的全局变量,原始c源文件

.line   原始c源文件的行号,和.text节中的机器指令之间的映射。-g

.strtab  字符串表,包含.sytab .debug节中的符号表和头部中节的节的名字。主要包含符号表需要的各个字符串。

节头部表

其他节在讲节是在说明。

介绍:

elf头:

         除了标识ELF文件的几个字节之外,ELF头还包含了有个文件类型和大小的有关信息,以及文件加载后的程序执行入口信息。

程序头表:

         程序头表(programheaeder table)向系统提供了可执行文件的数据在进程虚拟地址空间中的组织方式的相关信息。它还表示了文件可能包含的段数目,段的位置和用途。

段:

         各个段保持了与文件相关的各种形式的数据,例如,符号表、实际的二进制码、固定值(如字符串)或程序使用的数值常数。

节头表:

         节头表(sectionheader table)包含了与各段相关的附加信息。

举例源程序

  评论这张
 
阅读(118)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017