问题标签 [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 投票
2 回答
5219 浏览

compiler-construction - ELF 文件中存储的“节到段映射”在哪里?

作为尝试完全从头开始编写编译器的一部分,我目前正在处理处理 ELF 文件的部分。

在浏览了几篇关于它们的文章和规范之后,我仍然不太明白节到段映射的存储位置。在观察由 NASM+ld 生成的小型可执行文件时,我可以看到 .text 部分以某种方式映射到 LOAD 类型的程序头,但是如何?

当给定一个小的(工作的)可执行文件作为输入时,一小段 readelf 的输出:

这个映射甚至需要有一个工作的可执行文件吗?还是可以完全省略它们而您仍然有一个有效的可执行文件?

0 投票
1 回答
507 浏览

c++ - 打印定义给定符号的库的名称

假设您有符号的名称(已解构或未解构)以及动态链接到其他符号的库的名称,您想找出哪个库能够解析该符号。

我尝试使用nmobjdumpreadelf我找不到关于它的好的文档,看起来使用这个工具是不可能的。

gdb提供了类似的东西,但它是一个调试器,我需要一些东西来快速查找,你知道如何在不启动调试会话的情况下做到这一点吗?

0 投票
1 回答
51 浏览

regex - 如何使用 gnu utils 从这三行中选择一行?

所以基本上我想使用这个命令来获取.plt部分信息。

输出是这样的:

所以基本上我只想得到中间线,即:

我尝试了几种方法,但我就是无法做到...

谁能给我一些帮助?

0 投票
1 回答
1085 浏览

linux - readelf 命令中 mips 标志的含义?

我在linux上执行了命令“readelf -h test”(“test”是我的二进制程序),得到以下文本:

您能否详细告诉我上述文字中标志的各个含义?

我用谷歌搜索了它,但找不到答案。任何意见将不胜感激。

0 投票
0 回答
92 浏览

linux - 我应该参考哪些东西来正确配置交叉编译器?

我已经参考了“readelf -h target.bin”的输出(target.bin 在目标机器上运行)来配置交叉编译器。我假设交叉编译器编译的二进制程序的 readelf 输出应该与 target.bin 的输出相同。

但是,在以下情况下,两个具有不同“readelf”输出的程序可以在目标机器上成功运行。此外,具有与 target.bin 的输出类似的 readelf 输出的另一个程序在目标机器上不可执行。似乎 readelf 输出对于交叉编译器的配置并不重要。 那么...对于目标机器的交叉编译器的正确配置,我应该参考哪些内容?

例子:

readelf -h target.bin(target.bin 是运行在目标机器上的二进制程序)输出:

readelf -h myfail_target.bin(由我编译)在目标机器上不可执行,输出:

readelf -h mysuccess_target.bin(由我编译),可在目标机器上执行,输出:

任何意见将不胜感激。

0 投票
2 回答
2464 浏览

linux - readelf如何翻译入口点

我有一个 elf 文件,当我使用 readelf -h filename 时,我得到了入口点。现在,假设我想自己计算这个地址[使用汇编,但语言并不重要]。

我怎样才能做到这一点?

我知道入口点是从文件中偏移量 24 开始的 4 个字节,但我不知道如何将这些数据转换为地址。

0 投票
1 回答
789 浏览

gcc - 了解为什么 gcc/ld 使用 readelf 链接来自特定库的符号

我在 gcc ( -llapacke -llapack -lcblas) 中包含了几个库,并且我收到“未定义的引用”错误,除非我明确链接到其中一个库的静态版本 ( lapacke)。我试图通过使用nm和搜索有问题的库的各种变体来理解原因readelf。让我们来看看“未定义”的功能zsysv_rook_

这就是动态变体。这是静态变体:

为什么它只编译静态版本?

0 投票
3 回答
1139 浏览

c - DWARF - 如何在给定的二进制文件中找到函数的序幕结束/结尾起始地址?

我有一个 ARM 二进制文件,我需要准确地找到它的函数序言结束和结语开始的地址。换句话说,我需要功能体的边界。例如,如果我有一个函数,其程序集类似于:

我需要一种方法来使用 readelf 或 objdump 之类的东西快速找到0x00000326and 0x0000034e(prologue end/epilogue start) 或0x00000328and (function body start/end)。0x0000034c简单地反汇编它并检查代码是行不通的(理想情况下,我会使用脚本来解析 readelf 的输出或我用来获取 DWARF 信息的任何程序)。

根据 DWARF 4 标准,.debug_line 部分应该有行号信息,其中包括“ prologue_end”和“ epilogue_begin”,这正是我所需要的。但是,输出arm-linux-readelf --debug-dump=rawline,decodedline并没有给我那个信息。

我正在使用gcc 4.8.2标志-ggdb3进行编译。

编辑:更多信息:objdump 和 readelf 都向我展示了这样的内容:

查看 binutils 的 dwarf.c 的来源,它似乎应该在行信息转储中打印类似“Set prologue_end to true”和“Set epilogue_begin to true”的内容。然而,所有的操作码似乎都是特殊的而不是标准的。

0 投票
0 回答
668 浏览

linux - 绝对路径如何进入可执行文件动态部分的“需要”部分?

我有许多链接到单个库路径的可执行文件。例如,可执行文件foo链接到 (say)libboost_system.solibfoo.so,后者是我自己构建的。我将第三方库放在一个变量LDLIBS中,并通过链接我的库-lfoo,因此 makefile 行如下所示:

然而,当我readelf,我看到了自己的道路!

我自己的库是唯一具有绝对路径的库。

我怎样才能摆脱这个怪物只使用makefile,即不使用patchelf --replace-neededor chrpath

0 投票
1 回答
2939 浏览

c - 读取 ELF 二进制文件的 plt 部分并打印函数虚拟地址

我想读取 ELF 二进制文件的 .plt 部分并获取外部函数的所有虚拟地址。

比如0x400410和函数名puts@plt等等。我试图阅读REL_PLTELF 二进制文件的部分。但是我从全局偏移表中获得了0x601108PLT 条目的地址。0x400410如何获取 plt 条目的虚拟地址?

编辑:原来我正在阅读got.plt部分。如何.plt使用 readelf 仅阅读部分?