问题标签 [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.
gcc - objdump --dwarf 汇编代码不列出函数
我写了简单的 x86 汇编程序:
并用
但是当我这样做时objdump --dwarf asm.o
,它不会显示任何有关功能的信息foo
。看起来,gcc 不会创建.debug_info
有关foo
.
顺便说一句,有一个foo
in条目.symtab
。
有任何想法吗?
debugging - 从可执行文件中提取结构定义
我需要从可执行文件中提取结构定义。我怎样才能做到这一点?我读到我们可以使用 ELF 做到这一点,但不知道如何做到这一点。这里有什么帮助吗?
linux - 为什么 ELF 文件包含 size=0 的符号表部分?
我试图理解 ELF 中的符号表,所以我有:
在 ELF 中编译并检查其符号表:
真正让我感到困惑的是:它说(来自互联网),“值”表示每个部分的偏移量,“大小”表示目标大小。为什么它们都偏移 00000000 并且其中一些大小 = 0?
问题:
我想如果 size=0 那么它不应该存在,并且在 ELF 中拥有信息毫无意义。
例如,对于包含源文件名“ac”的行“1”(我标记为“#Confused”),它有Ndx=ABS和Name=ac的信息,如果这个部分是0大小,那么它是如何存储在ELF中的? 我想应该至少有3个字节来保存“ac”文件名,所以大小应该>=3。对吧?
c - readelf 显示错误的部分偏移
对于 ELF 文件的某些部分,例如“.dynstr”,写入部分头表结构中的偏移量是“readelf -a”不报告的。例如,偏移量是“0x0245”,但 readelf 报告“0x0300”作为部分的偏移量。我可以使用 HexEditor 确认“readelf”返回的偏移量是错误的。对于前几节,readelf 报告的相应偏移量是正确的,但在某些点向下,所有偏移量都是错误的。有谁知道为什么报告的偏移量与文件中写入的偏移量不同?或者这是与 readelf 相关的错误?
注意:通过使用“objdump -h”我还可以确认 readelf 报告的偏移量是错误的
注意 2:' readelf ' 返回的一些偏移量甚至大于文件大小。
这是作为输出示例或 readelf:
这是“objdump -h”输出:
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”?如果我们对上述查询没有任何解决方案,这方面有什么帮助吗?
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 的代码,我不确定我是否同意这些应该链接到我的代码中。
更多细节:
gdb - 来自 readelf 的 DWARF 转储中最左边的数字是什么意思?
例如:
在每个 DIE 条目的开头,都有一个数字,例如<0>
,<1>
……这些数字是什么意思?似乎相同的数字表示相同的 DWARF 类型,我猜例如条目的<1>
意思是它们都是 (DW_TAG_base_type)
.
gcc - 用于分析 ELF 文件的 .bss 部分大小的工具存在分歧
在分析编译为 ARM 平台的 ELF 文件的 C++ 程序的 .bss 部分时,我遇到了几种确定大小的方法。问题Tool to analyze size of ELF section and symbol中也提到了我测试的四种方法。
然而,结果却大不相同:
这可能是什么原因?
用于生成输出的 Python 脚本
编辑:我发现的一件事是 nm 将函数内部的静态变量(正确地)分类为弱(V),尽管它们可能是 .bss 的一部分。但是,并非所有归类为 V 的部分都是 .bss 的一部分,因此我不能只将所有 V 部分添加到大小中。那么这个任务用 nm 是不可能的吗?
linux - 应用程序显示为 DYN(共享对象文件)
我的 Ubuntu 系统上有一个应用程序CMake
,使用add_executable
谓词构建。它本身运行良好,但是,readelf
显示它DYN (Shared object file)
通常应用于共享库:
有谁知道为什么会发生这种情况?
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 运行时,有什么方法可以仔细检查吗?