问题标签 [readelf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4853 浏览

elf - 使用 binutils/readelf 确定符号地址

我正在开发一个项目,我们的验证测试脚本需要在被测软件的构建中定位符号地址。这可能用于设置断点或从内存中读取静态数据。我所追求的是创建一个包含符号名称、内存中的基地址和大小的映射文件。我们的构建输出一个 ELF 文件,其中包含我想要的信息。我一直在尝试使用readelf、nm 和 objdump工具来尝试并获得我需要的符号地址。

我最初尝试过readelf -s file.elf,这似乎可以访问一些符号,尤其是那些用汇编程序编写的符号。然而,我想要的许多符号都不在那里——特别是那些源自我们的 Ada 代码的符号。

我曾经readelf --debug-dump file.elf转储所有调试信息。从中我确实看到了所有符号,包括 Ada 代码中的符号。但是,格式似乎是 DWARF 格式。当我要求它列出符号信息时,有谁知道为什么 readelf 不会输出这些符号?也许我只是缺少一个选项。

现在我可以编写一个自定义 DWARF 解析器来获取信息,但如果我可以使用 Binutils(nm、readelf、objdump)之一来获取它,那么我真的更喜欢标准解决方案。

0 投票
1 回答
1350 浏览

python - 如何在 python 中读取 ELF 文件的动态部分

我想获取有关 ELF 文件的动态部分的信息。基本上与我使用命令行获得的信息相同:

readelf -d elfFile

0 投票
1 回答
994 浏览

c - Printf 符号分辨率

我正在编写一个小程序,它使用 ptrace(单步、getregs、pick_text、操作码比较等)跟踪二进制文件(elf)的所有系统调用和调用。

到目前为止,我已经成功地跟踪了系统调用和简单的调用,比如用户定义的函数。

但是由于 ptrace,我无法从我选择的地址中获取 printf 符号的名称。

我的问题是:对于 printf、strlen 等动态链接函数,如何在 elf 文件中从地址中检索符号名称?

通过简单的调用,这很容易,我遍历 .strtab 部分,当地址匹配时,我返回相应的 str。

但是对于 printf,该符号在 .strtab 中是已知的,但地址为“0”。

objdump -d 以某种方式成功地将对 printf 的调用与其地址链接起来。

你有什么主意吗 ?

0 投票
1 回答
460 浏览

arm - ARM ELF 对象内的函数大小不正确

目标文件的 readelf 输出:

.text 部分结构据我所知:

.text 部分的大小为 0x124

请注意,节大小为 0x124,最后一个函数以 0x125 结束,丢失的字节发生了什么?

谢谢。

0 投票
1 回答
1786 浏览

python - 如何在 ELF 文件中查找全局变量的类型?

因为这是我在 SO 上的第一个条目:大家好 :)

现在到了好的部分......我正在努力从 ELF 文件中找出一种全局变量。我编译前的源代码是这样的:

当我用 readelf 或 objectdump 试试运气时,这是我得到的最远距离。结果readelf -s LEKCJA2.elf是:

如您所见,我可以列出我的全局变量(例如variable_global1),我也知道它在内存中的大小,但不幸的是不知道类型 - 无论是 unsigned int、signed int、UBYTE 等等。

最后我的问题:是否甚至可以从 ELF 文件中找出一种全局变量(未初始化或已初始化),如果可以,我该怎么做?现在我正在使用不同的 CMD 工具和 Python 库来解析 ELF 文件,但我无法更接近我想要做的事情。

我感谢你所有的帮助:)

0 投票
1 回答
86 浏览

gdb - gdb backtrace 如何知道每个函数取自哪个库?

我编写了一个简单的程序,它所做的只是调用一个名为 meller1 的函数,该函数调用 meller2,依此类推,直到某个函数调用空闲并崩溃。当使用 coredump 文件在该程序上运行 gdb 回溯时,我收到:

gdb BT

我的问题是,gdb bt 怎么知道 free 是取自 /lib/libc.so.6 的?给定一个Coredump文件和可执行文件本身,有没有一种我可以自己做的手动方式?谢谢。

0 投票
1 回答
3418 浏览

linker - Readelf查找绝对地址

我有一个 C 程序,它有一个全局变量和一个局部变量。我的问题是在readelf上。以下是我的问题;1. 当我使用“readelf --symbols”进行地址转储时,我得到的全局变量地址与我运行程序时打印的地址相同。readelf 如何在我的程序运行或加载之前知道绝对地址?2. 为什么没有局部变量符号的信息?我只能看到全局变量的符号。

0 投票
1 回答
2344 浏览

linux - ldd -v 中的版本信息是什么意思?

所以有 3 行libc.so.6,版本为GLIBC_2.xx

这意味着什么?这liblapack.so需要什么版本的 libc.so.6?

我怎样才能得到liblapack.so的版本?

0 投票
2 回答
1381 浏览

c++ - 在 Linux 中使用插件的 C++ 程序的最佳实践

有人可以阐明将插件加载到 C++ Linux 程序中的最佳实践是什么?

假设我们有一个带有插件(libsyntax.so)的程序(编辑器)。编辑器的配置文件包含 libsyntax.so 库的路径 (plugin1=/opt/editor/gizmos/libsyntax.so)。编辑器读取配置然后调用:

一切都很好,东西工作。

现在让我们假设 (libsyntax.so) 依赖于辅助库 (libcolor.so)。当我们运行 readelf 时,我们得到:

但是此时上述 dlopen() 失败并且错误是“没有这样的文件或目录”。使用 LD_DEBUG=all 显示在加载 libsyntax.so 后,消息是:

加载器/链接器正在标准位置查找,显然没有找到我的依赖项。这可以通过 ldconfig 或 LD_LIBRARY_PATH 轻松解决,但两种解决方案都感觉很脏。

有没有一种干净的方式来加载插件和依赖项?你是怎么做到的?

0 投票
1 回答
1228 浏览

gcc - ELF 文件中的 VirtualAddress、LoadAddress 和 PhysicalAddress?

根据输出部分描述的ld手册:

地址>区域代表VMA,即输出部分的虚拟内存地址。

AT()AT>lma_region代表 LMA,即输出部分的加载内存地址。

我决定仔细查看readelf -e转储 helloworld elf 文件的节头程序头。结果如下:

节标题

程序头

我的问题是:

  • 为什么转储的标头中没有LMA?LMA 在 ELF 文件中如何表示?
  • 红色矩形中的 Addr 列是什么意思?虚拟机?
  • 绿色矩形中的 PhysAddr 是什么意思?

加 1

到目前为止,PhysAddr 似乎是 LMA。