繁体   English   中英

小精灵标题-片段重复

[英]Elf header - Repetition of segments

我对某些小精灵部分的重复感到怀疑。 我有X86_64 ABIelf64规范

首先,在/ usr / bin中找到并通过readelfobjdump测试的所有经过测试的程序似乎都给出了实际的答案,但是仍然:

  • 程序头是否可以具有多个PT_DYNAMIC段? (我的回答:我没有理由,但是我可能会错过一些东西。)
  • 在指出的PT_DYNAMIC部分中,是否可以有两个DT_RELA数组? (我的回答:不,因为否则我们将无法确定DT_RELASZ定义的是哪个数组。但是,与此同时,一些消息来源谈论的是“一个”重定位表,而不是“ the”,因此..这意味着多个PT_DYNAMIC或多个DT_RELA .. HMM,HMM)

所以,男孩:),请您确认/矛盾吗?

程序头是否可以具有多个PT_DYNAMIC段?

我不相信ELF格式规范中的任何内容会禁止这样做,但是如果您使用两个PT_DYNAMIC创建文件,则动态加载程序可能会感到不满意。

在动态加载程序中编写代码的常用方法:

// ehdr points to Elf64_Ehdr in memory.
Elf64_Phdr *phdr = (Elf64_Phdr*)(ehdr + ehdr->e_phoff);
Elf64_Phdr *dyn = NULL;    
for (j = 0; j < ehdr->e_phnum; ++j) {
  if (phdr[j].p_type == PT_DYNAMIC) {
     dyn = phdr + j;
     // break;
  }
  // some other code
}

完成上述循环后, dyn将指向PT_DYNAMIC最后一个实例。 但是,如果不存在“其他代码”,并且注释了“ break”(即,我们PT_DYNAMIC ),则dyn将指向PT_DYNAMIC第一个实例。

而且,如果加载程序中同时存在两种风格的循环(很可能是这种情况),那么加载程序很可能会感到困惑并遇到断言失败。

是否可以有两个DT_RELA数组?

循环答案的两种相同样式也适用于此处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM