问题标签 [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 回答
1111 浏览

gcc - objdump --dwarf 汇编代码不列出函数

我写了简单的 x86 汇编程序:

并用

但是当我这样做时objdump --dwarf asm.o,它不会显示任何有关功能的信息foo。看起来,gcc 不会创建.debug_info有关foo.

顺便说一句,有一个fooin条目.symtab

有任何想法吗?

0 投票
2 回答
1436 浏览

debugging - 从可执行文件中提取结构定义

我需要从可执行文件中提取结构定义。我怎样才能做到这一点?我读到我们可以使用 ELF 做到这一点,但不知道如何做到这一点。这里有什么帮助吗?

0 投票
1 回答
910 浏览

linux - 为什么 ELF 文件包含 size=0 的符号表部分?

我试图理解 ELF 中的符号表,所以我有:

在 ELF 中编译并检查其符号表:

真正让我感到困惑的是:它说(来自互联网),“值”表示每个部分的偏移量,“大小”表示目标大小。为什么它们都偏移 00000000 并且其中一些大小 = 0?

问题:

我想如果 size=0 那么它不应该存在,并且在 ELF 中拥有信息毫无意义。

例如,对于包含源文件名“ac”的行“1”(我标记为“#Confused”),它有Ndx=ABS和Name=ac的信息,如果这个部分是0大小,那么它是如何存储在ELF中的? 我想应该至少有3个字节来保存“ac”文件名,所以大小应该>=3。对吧?

0 投票
0 回答
1102 浏览

c - readelf 显示错误的部分偏移

对于 ELF 文件的某些部分,例如“.dynstr”,写入部分头表结构中的偏移量是“readelf -a”不报告的。例如,偏移量是“0x0245”,但 readelf 报告“0x0300”作为部分的偏移量。我可以使用 HexEditor 确认“readelf”返回的偏移量是错误的。对于前几节,readelf 报告的相应偏移量是正确的,但在某些点向下,所有偏移量都是错误的。有谁知道为什么报告的偏移量与文件中写入的偏移量不同?或者这是与 readelf 相关的错误?

注意:通过使用“objdump -h”我还可以确认 readelf 报告的偏移量是错误的

注意 2:' readelf ' 返回的一些偏移量甚至大于文件大小。

这是作为输出示例或 readelf:

这是“objdump -h”输出:

0 投票
1 回答
10819 浏览

elf - Trace32 命令从 ELF 文件中读取符号内容

问题场景:简单来说,我们是否有一个 Trace32 命令来从加载到目标的 ELF 文件中读取符号(及其内容)?我们有这种特殊情况,其中 ELF 文件的应用程序特定调试符号作为 ELF 中“.noload”部分的一部分,这意味着符号/内容是 ELF 文件的一部分(使用 readelf -a xxxx 读取时可用。 elf_file_name) 但不是最终生成的二进制映像的一部分,即在生成闪存到目标内存的 xxx.bin 时,ELF 文件中的“.noload”部分被剥离。

  • '.noload' 部分中的调试符号是静态分配的值,并且这些值在运行时不会更改。
  • 当我试图读取“.noload”部分的调试符号部分(编译成二进制文件并加载到 Trace32 之后)时,我看到 trace32 弹出窗口上标记了“MMU 失败”,这意味着 trace32 正在尝试从内存中读取符号内容,但是不可访问,因为“.noload”部分的符号部分根本没有加载,尽管它们已经映射了地址。

任何输入
- 我需要一个 trace32 命令的帮助,该命令可以直接从 ELF 文件中读取符号内容,而不是从目标内存中读取符号内容。
- 也不确定我是否可以在练习脚本中使用“readelf”?如果我们对上述查询没有任何解决方案,这方面有什么帮助吗?

0 投票
1 回答
11536 浏览

c - 为什么 register_tm_clones 和 deregister_tm_clones 引用了一个超过 .bss 部分的地址?这个内存分配在哪里?

register_tm_clones并且deregister_tm_clones正在引用我的 RW 部分末尾的内存地址。这个内存是如何被追踪的?

示例:在下面的示例中,deregister_tm_clones引用了内存地址0x601077,但我们分配的最后一个 RW 部分,.bss开始于0x601069并具有大小0x7,加上我们得到0x601070。因此,引用显然超出了为该.bss部分分配的内容,应该在我们的堆空间中,但谁在管理它。

请注意,引用正好从该部分的末尾开始.bss。当我检查使用 gdb 分配的内存时,我看到有足够的空间,所以它工作正常,但我看不到这个内存是如何管理的。

我在任何其他部分都找不到其他参考。为 .bss 加载的段也没有为其保留空间:

谁能澄清这些功能?源头在哪里?我已经阅读了有关事务内存的所有参考资料,但它们涵盖了编程而不是实现。我找不到删除此代码的编译器选项,当然-nostdlibs这会让您一无所获。

这些可能是 malloc 的一部分吗?仍然对于不使用 malloc、线程或 STM 的代码,我不确定我是否同意这些应该链接到我的代码中。

另请参阅gcc 为 linux ELF 添加了哪些功能?

更多细节:

0 投票
1 回答
295 浏览

gdb - 来自 readelf 的 DWARF 转储中最左边的数字是什么意思?

例如:

在每个 DIE 条目的开头,都有一个数字,例如<0><1>……这些数字是什么意思?似乎相同的数字表示相同的 DWARF 类型,我猜例如条目的<1>意思是它们都是 (DW_TAG_base_type).

0 投票
1 回答
1085 浏览

gcc - 用于分析 ELF 文件的 .bss 部分大小的工具存在分歧

在分析编译为 ARM 平台的 ELF 文件的 C++ 程序的 .bss 部分时,我遇到了几种确定大小的方法。问题Tool to analyze size of ELF section and symbol中也提到了我测试的四种方法。

然而,结果却大不相同:

这可能是什么原因?

用于生成输出的 Python 脚本

编辑:我发现的一件事是 nm 将函数内部的静态变量(正确地)分类为弱(V),尽管它们可能是 .bss 的一部分。但是,并非所有归类为 V 的部分都是 .bss 的一部分,因此我不能只将所有 V 部分添加到大小中。那么这个任务用 nm 是不可能的吗?

0 投票
1 回答
916 浏览

linux - 应用程序显示为 DYN(共享对象文件)

我的 Ubuntu 系统上有一个应用程序CMake,使用add_executable谓词构建。它本身运行良好,但是,readelf显示它DYN (Shared object file)通常应用于共享库:

有谁知道为什么会发生这种情况?

0 投票
0 回答
1188 浏览

c++ - 如何检查库是用 c++11 还是 c++14 编译的?

我正在为一个项目构建多个动态库。我想用 c++11 构建整个项目。在构建库时,我明确指定了 CXX 和 C 标志。我正在使用 CMAKE 3.5 来构建库。我在构建每个模块时指定 c++11 或 gnu11 版本,例如

-DCMAKE_C_FLAGS="-std=gnu11" -DCMAKE_CXX_FLAGS="-std=c++11"

我想在构建库后验证它们是否使用 c++11 运行时,有什么方法可以仔细检查吗?