如何解析arm64 elf文件?

问题描述 投票:0回答:2

enter image description here

我想解析一个elf64位文件。该符号的地址为0x25008,但实际上该地址不存在。如下图所示,文件的最大地址为0x1a900。显然,0x25008大于0x1a900。我应该如何解析这个elf文件以获得正确的地址

arm32中不存在此问题,如何在arm64下解决此问题

enter image description here

elf arm64
2个回答
0
投票

此符号的地址为0x25008,但实际上此地址不存在

此符号所属的section很重要(此处为第31节)。

该符号可能在.bss部分中,保证可以用零初始化,并且不存储在文件中(在文件中存储一堆零没有意义-您只需填充在运行时为零的部分)。


0
投票

就解析而言,您可以使用readelf。使用-e标志,它将列出不同部分的所有信息。在那里您可以看到您的符号驻留在哪个部分。但在您的情况下,有一些要考虑的地方。

对于未初始化的全局数据,我们不需要在elf中创建单独的空格。我们已经知道它们将为零。知道事实之后,我们在链接器文件中提供了一个名为bss的部分,在链接阶段,所有此类变量都在该部分中分配了地址,并且在执行该程序时,最开始的代码清除了bss并将所有零写入那里,因此我们在创建elf时节省了空间,并且在加载该elf时也节省了时间。

对于局部变量,它们是在堆栈上创建的,它们永远不会作为单独的符号作为小精灵的一部分。请阅读此内容以获取更多有关此类内容的信息Function Prologue and Epilogue in C

这里只是回答您的主要问题,是一些简单的方法来解析elf,并假设工具链为arm64-none-eabi:

这将输出所有节的信息以及有关elf的一些特定于拱的信息

arm64-none-eabi-readelf -e ./<elf-file>

这将分解整个小精灵并输出所有汇编代码和符号

© www.soinside.com 2019 - 2024. All rights reserved.