Android中ELF文件结构浅析(三)

 一、  节头表(section header table)

        在目标文件中可以包含很多“节”(section),所有这些“节”都登记在一张称为 “节头表”(section header table)的数组里。通过每一个表项可以定位到对应的节。

        每一个表项结构如下:

struct Elf64_Shdr {
  Elf64_Word sh_name;
  Elf64_Word sh_type;
  Elf64_Xword sh_flags;
  Elf64_Addr sh_addr;
  Elf64_Off sh_offset;
  Elf64_Xword sh_size;
  Elf64_Word sh_link;
  Elf64_Word sh_info;
  Elf64_Xword sh_addralign;
  Elf64_Xword sh_entsize;
};

 1.  sh_name

        本节的名字。整个名字的字符串并不存储在这里,它仅是一个索引号,指向 “字符串表”节中的某个位置,那里存储了一个以’\0’结尾的字符串。

        在第一篇文章中的elf header中的 e_shtrndx 可以知道 节头表里面字符串表的索引。

从s_offset的0x40F5偏移 s_name_off 也就是 0x19 开始到第一个 0 结尾取出内容刚好是 .text;

        

2.  sh_type

        本节的类型。

#define SHT_NULL	  0		/* 节头表条目未使用 */
#define SHT_PROGBITS	  1		/* 程序数据 */
#define SHT_SYMTAB	  2		/* 符号表 */
#define SHT_STRTAB	  3		/* 字符串表 */
#define SHT_RELA	  4		/* 带加数的重定向条目 */
#define SHT_HASH	  5		/* 符号哈希表 */
#define SHT_DYNAMIC	  6		/* 动态链接信息 */
#define SHT_NOTE	  7		/* Notes */
#define SHT_NOBITS	  8		/*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值