首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得ELF文件的值?

如何获得ELF文件的值?
EN

Stack Overflow用户
提问于 2015-03-02 09:05:00
回答 1查看 578关注 0票数 2

我是Linux系统的初学者,我正在学习阅读这个文档的ELF文件格式(Format.pdf)。但是,当我看到有关搬迁的相关文件时,在搬迁计算中会出现一些奇怪的事情。我知道根据搬迁类型,它采用不同的计算方法。但是看看这个。

当R-类型为R_386_RELATIVE时,本文档说明计算"B + A“的方法。然而,"A“究竟是什么意思呢?我如何在ELF文件中得到这个"A“值?

请给我仁慈的回答.;

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-02 09:36:13

从你提到的文件中:

R_386_RELATIVE 链接编辑器为动态链接创建此重定位类型。其偏移量成员提供共享对象中的位置,该对象包含表示相对地址的值。动态链接器通过添加来计算相应的虚拟地址,该虚拟地址是将共享对象加载到相对地址的虚拟地址。此类型的重新定位项必须为符号表索引指定0。 A 这意味着用于计算可重定位字段值的加载项B 这意味着在执行期间,共享对象已加载到内存中的基地址。通常,共享对象文件是用0基虚拟地址构建的,但是执行地址会有所不同。 加法 如上面所示,只有Elf32_Rela条目包含一个显式加载项。类型为`Elf32_Rel的条目在要修改的位置中存储隐式加载项。根据处理器体系结构的不同,一种或另一种形式可能是必要的,也可能更方便。因此,特定机器的实现可以单独使用一种形式,也可以根据上下文使用任何一种形式。 基址 要计算基址,可以确定与PT_LOAD段的最低PT_LOAD值相关联的内存地址。然后,通过将内存地址截断到最大页大小的最近倍数来获得基地址。根据加载到内存中的文件的类型,内存地址可能与p_vaddr值匹配,也可能不匹配。

因此,它归结为下一个:

  • Elf32_Rel A是根据Elf32_Rela结构计算的加法。
  • p_vaddr. B基址,由计算。具体计算取决于体系结构。

您可以使用readelf -r观察某些二进制/库文件的重定位部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28805940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档