问题标签 [elf]
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.
c - ELF 文件版本
我正在处理elfdump
命令的克隆。
elfdump -ecps *file*
在所有可执行文件上运行时,我的程序运行良好。但是,当我在库文件(例如 libc.so)上运行程序时,它会为 .symtab 部分中的所有符号打印出不正确的版本号(特别是它们都为零)。我已经查看了很多次文档,但我无法弄清楚为什么会发生这种情况。
有人可以提供一些提示吗?或者可能如何检测它是否是一个库,所以我可以硬编码一个 0?
assembly - 如何在 x86 上为我的语言最好地传递全局偏移表 (GOT)?
我正在为我的语言编写一个小程序加载器,因为我放弃了理解 ELF 格式(在这样做的同时,我最终可能会更好地理解它)。我将文件映射到内存中,然后无尾礼服欢欣鼓舞。
我不想通过对其进行任何更改来阻碍程序的共享。因此,我最终做了与 C 和 elf 相同的操作:全局偏移表。
问题是:我怎样才能通过我的程序的 GOT?
首先想到的是在寄存器或堆栈参数中提供它。在寄存器中它会很棒,但是 x86 被它的寄存器数量所阻碍。这可能意味着我将失去 ebx 或 ebp 或类似的东西。在一个合理的架构中,这将是一个公平的权衡。在 x86 中感觉有点失败。
共享库的反汇编显示 gcc 正在将其作为 IP 相对寻址。如果我这样做,那将是:
虽然,这在一定程度上感觉很复杂。我不喜欢这样做。
还有什么想法,有人吗?
编辑:当使用多个库处理此问题时,我意识到:每个应用程序将有多个 GOT,并且某些 GOT 的使用取决于我所在的代码块。因此将 GOT 保存在单独的寄存器中需要一些我不知道的其他技巧。我想知道他们在将 GOT 保存在寄存器中时如何解决这个问题。
c++ - .bss 部分零初始化变量是否占用 elf 文件中的空间?
如果我理解正确,.bss
ELF 文件中的部分用于为零初始化变量分配空间。我们的工具链生成 ELF 文件,因此我的问题是:该.bss
部分实际上是否必须包含所有这些零?这似乎是一种可怕的空间浪费,例如,当我分配一个全局 10 兆字节的数组时,它会在 ELF 文件中产生 10 兆字节的零。我在这里看错了什么?
java - 在 Java 中:在给定 COFF/ELF/DWARF 可执行文件的情况下,以编程方式确定 C/C++ 变量的地址
这是我时不时遇到的情况:
对于不使用虚拟寻址的嵌入式系统,我有一个从 C 或 C++ 代码编译的可执行文件,其中包含调试信息。它通常采用 COFF 或 ELF/DWARF(我把这两种混淆)格式。
在运行时,在 PC 上,我想确定给定名称的变量的地址。(例如“foo.bar[7].baz”)这允许我在嵌入式系统上读/写变量的值(给定一个超出此问题范围的调试协议)。显然,任何基于堆栈或基于堆的变量都不存在,因为它们没有静态地址。
我之前已经在 C++ 中完成了这项工作,以从 TI 的编译器为他们的 2800 系列 DSP 解析 COFF 文件,这有点痛苦。我想知道那里是否已经有一个 Java 库可以做这种事情,因为我面临着同样的事情与一个或两个其他处理器的可执行文件。
更新:(2009 年 11 月 18 日)一个有希望的线索!
有没有人使用过 Eclipse CDT ELF 解析器?
(参见http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc.isv/reference/api/org/eclipse/cdt/core/model/IBinary.html之一javadoc pgs 的)
TI 的 Code Composer 4(基于 Eclipse)似乎使用了这个,所以如果我能弄清楚文档在哪里,也许我可以用它来解决我的问题。
kernel - 将内核映像从 ELF 转换为 PE
我正在使用 Msys 构建我在 Linux 下编写的 home brew 内核。Linux 使用 ELF 作为其二进制格式,而 Msys 使用 PE。我有源设置以允许 Grub 使用 Multiboot 规范启动它。在构建结束时,我得到一些未定义的符号:
这些似乎是面向 ELF 的符号。如果有人可以建议我如何在 PE 世界中处理这些问题,例如,如果有等价物,那将对我有很大帮助!
executable - 有没有统一执行程序和调用函数的系统?
我希望能够从 shell 执行以下一项或多项操作: - 从程序调用任何函数,不仅是 main - 传递不仅是字符串的参数(不仅是 argv) - 让程序不仅返回 int (main 的返回代码) - 将返回值分配给 shell 级变量,以便能够将它们传递给其他程序
你明白了。例如,python toplevel 允许 python 程序这样做。C++呢?还是Linux上允许这样做的ELF替代品?
c++ - 使用 RVCT 为 WinCE/Window Mobile 编译 AMR-nb 编解码器
我正在研究 amr 语音编解码器(移植/优化) 我有一个来自 voiceage 的 arm(用于 WinCE)优化版本,我将它用作性能测试的参考。到目前为止,使用我的 lib 生成的二进制文件比另一个文件高 20-30%!我使用 Vs2008,但我只能使用 Microsoft 编译器生成的 ARM 指令集。所以我试图寻找替代编译器,看看会有什么性能差异。我有 RVCT 编译器,但它会生成 elf 二进制文件/目标文件。但是,我在 wince 手机 (TyTn 2) 上运行我的测试,所以我需要找到一种方法在 WinCE 上运行使用 RVCT 编译的代码。一些选项是 1) 生成汇编列表(armcc 的 -S 选项),
我的第一次尝试是使用一个导出函数创建一个简单的 c++ 文件,使用 RVCT 对其进行编译,然后尝试在智能手机上运行该函数。发出的程序集无法由 ms 汇编器组装(不仅它们不兼容,而且 ms 汇编器拒绝使用 RVCT 编译器生成的一些指令;在我的情况下为 ASR 操作码)然后我尝试将 ELF 对象转换为 coff 格式,我找不到任何相关信息。有一个用于 ce 的 gcc 端口,并且该工具集中的 objcopy 应该能够完成该任务。但是,我无法让它工作。我尝试了不同的开关,但我不知道我需要为输入和输出格式指定什么作为 bfdname。所以,我也无法让它工作。使用 fromelf 转储并使用生成的 bin 文件似乎有点过头了,所以我决定问你们是否有什么我应该尝试做的,或者也许有人已经完成了类似的任务并且可以帮助我。基本上,我想做的就是用 RVCT 编译器编译我的代码,看看性能差异是什么。我的代码对任何 c 运行时函数的依赖性为零。
谢谢!
elf - 修改elf文件
我想在 elf 文件中添加一个新标志。然后,该标志应该在进程描述符中可供内核使用。我的第一个想法是使用 libelf,但不幸的是,它在 Ubuntu 上似乎存在错误。Elfedit 可能是一个不错的工具,但我还没有找到适用于 Linux 的版本,尤其是 Ubuntu。
所以,我想知道是否有人可以向我建议是否有任何其他有用的工具可以将自定义标志添加到 elf 文件?
非常感谢您的帮助!
object - 文章/书籍:从源代码到可执行程序?
我正在寻找一篇“人类可读”的文章,如果可能的话,它会通过示例描述从源代码(比如 C)到可执行程序的转换。理想情况下,文章应包含有关目标文件格式、代码的不同部分如何映射到目标文件等的描述。那篇假设性的文章还将解释链接器如何使用多个目标文件,它如何使用不同的 ELF 实体并因此生成准备执行的文件。还有,比如说,如果目标文件引用外部库怎么办。它应假定具有高级/中级 C/C++ 知识。
我很想知道这样的文章/书籍/博客是否为人类所知。
谢谢
:J
c - 将部分添加到 ELF 文件
我需要能够将任意部分添加到 ELF 文件中。我不能在这个程序中使用 GPL 代码,所以 BFD 是不可能的。我可以使用 libelf/gelf 来阅读章节,但是这些文档相当稀少,我不知道如何添加章节。有人知道怎么做这个吗?我宁愿不编写自己的 ELF 代码。