问题标签 [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.

0 投票
1 回答
571 浏览

stack - 堆栈、帧、全局指针和 ELF 文件

如何确定堆栈、全局和帧指针在 ELF 文件中的位置?

0 投票
3 回答
603 浏览

c++ - BDM elf 文件与普通 elf 文件

就使用的内存而言,BDM ELF 文件与普通 ELF 文件相比有什么优势?

我对两者都了解以下几点:

  1. BDM ELF 文件可用于通过任何调试器工具(如 Trace32)通过插入 JTAG 进行调试。正常的 ELF 文件也可以用于调试目的,前提是我们有相应的 FLS 文件(Flash 文件)必须刷入 ECM 的 ROM 区域。
  2. BDM ELF 文件被加载到 ECM(电子控制模块)的 RAM 区域,而正常的 ELF 文件及其相应的 FLS 被加载到 ECM 的 ROM 中。
  3. ELF 文件(BDM 或普通文件)没有完全加载到 ECM 的内存中(我从我们用于加载 ELF 的 ECM 内存的大小来理解这一点,即 KB 与巨大的大小相比ELF(以 MB 为单位),ELF 文件的某些部分(类型、变量和函数等符号)保存在 Trace32 内存中。

以上是我对使用ELF的主要理解,我知道你们会帮助我纠正自己,以防我解释错误。

我的期望是了解 BDM ELF 文件内容是如何在 Trace32 调试器和 ECM 内存之间分布的,这两种 ELF 格式之间的优势是什么,因为两者都仅用于调试目的。请注意,在向客户发布应用程序/软件时,我们以客户闪存到其 ECM 中的 FLS 格式发布。

如果您需要更多信息来继续回答我的问题,请告诉我。

0 投票
2 回答
154 浏览

c++ - 我的交叉编译器总是编译同一个文件

我正在测试以确保我的交叉编译器正常工作。当我编译 hello world 时,它似乎编译得很好,但是当我将 hello.cpp 更改为循环 1000 次的同一程序时,生成的 elf 文件的大小完全相同。无论我进行什么更改,文件的大小始终相同,据我所知,具有相同的内容。什么会导致这个?

0 投票
1 回答
72 浏览

linker - 链接可执行文件

我试图弄清楚如何手动链接 ELF 文件。我知道文件结构,但是如何确定链接可重定位对象的顺序?

0 投票
4 回答
2551 浏览

linux - 重新排序 ELF 文件部分的简单方法

我正在寻找一种简单的方法来重新排序 ELF 文件部分。我有一系列自定义部分,我希望所有部分都按特定顺序对齐。

我发现如何做到这一点的唯一方法是使用链接器脚本。但是,文档表明指定自定义链接器脚本会覆盖默认值。默认链接描述文件中有很多内容,我不想在我的自定义脚本中复制这些内容只是为了让三个部分始终按特定顺序放在一起。像这样对链接器行为进行硬编码似乎不是很灵活。

我为什么要这样做?我有一段数据需要知道(开始和结束)的运行时内存位置。所以我创建了两个额外的部分并将哨兵变量放入其中。然后我想使用这些变量的内存位置来了解内存中未知部分的范围。

在上面的例子中,我知道 .targetSection 中的数据在 markerA 和 markerB 的地址之间。

还有另一种方法可以做到这一点吗?是否有库可以让我读取当前执行的 ELF 图像并确定部分位置和大小?

0 投票
1 回答
1140 浏览

linux - ELF 文件可以包含多个符号表吗?

ELF 文件可以包含多个符号表吗?它是否以某种方式标准化?

0 投票
1 回答
17326 浏览

linker - 解释 readelf -S 输出

我正在尝试将一个 elf 文件加载到我制作的 MIPS 模拟器中。我遇到的问题是我不太明白 elf 部分标题偏移背后的含义。当我进行段转储时,段 25 - 31 和 33 - 35 在 0x00000000 “开始”,但标题指出该段从某个值的偏移量开始(例如 010190)。同样在 -S 部分的开头,readelf 声明标头在内存中的 0x107b4 处开始。但是从 -S 中可以看出,最早的内存分配(因为段 0 是空的)实际上在段 26 的偏移量 010210 处。有人可以解释这里发生了什么吗?我想将所有这些文件静态分配到一个内存数组中。是否有一些关于偏移量的假设阻止我这样做?为什么 readelf 说 0x107b4 是标题起点?

另外,我应该.init在将PC放在readelf指定的“入口点”之前运行吗?

编辑:好的,所以,我对可执行文件进行了十六进制转储,现在我意识到偏移量是指实际 elf 文件中的位置(包含“地址”0 - 11d48 处的元素。)所以我现在的问题是。 ..我如何解决许多内存地址引用地址0x00000000的事实?它们当然有不同的偏移量,但现在我知道这是特定于文件的,这意味着几个部分的别名。我真的在内存寻址中使用偏移量吗?

第 25 段:

Readelf -S输出:

部分标题:

0 投票
2 回答
3974 浏览

gcc - 共享库如何获得自己的基地址

我有所有符号的偏移地址(通过 libelf 在其自己的二进制 .so 上执行获得)。现在,在运行时,我需要计算所有这些符号的绝对地址,为此我需要获取基地址(加载共享库的位置)并进行计算:

符号地址 = 基地址 + 符号偏移量

共享库如何获得自己的基地址?在 Windows 上,我会使用传递给 DllMain 的参数,在 linux 中是否有一些等价物?

0 投票
1 回答
2659 浏览

gcc - 如何解开目标文件?

我如何解开剥离的目标文件?

来自 elfutils 的 eu-unstrip 可以为我做这个吗?

我需要它来将 zImage 内核转换为 vmlinux 而无需重新编译。

这是我的脚本的一部分:

但是我的结果 vmlinux 格式未知,因为它不包含 ELF 标头,那么我该如何恢复这些标头?

0 投票
2 回答
5833 浏览

visual-studio - objdump ELF 和 Windows

我对这个主题相当陌生,即 ELF 和任何与 Linux 相关的东西。我正在尝试编写一个 ELF 文件,并且希望在 WinXP 上进行。

我的问题是,这可以用包括编译的 MS Visual Studio 来完成吗?据我了解,ELF 文件无法在 Windows 操作系统上编译。好吧,至少这是我的谷歌研究发现的。我必须设置 Linux 操作系统并在那里编译吗?

我可以使用 objdumo(GNU binutils 的一部分)来分析 WindowsXP 上的任何 ELF 文件吗?

非常感谢任何帮助和链接。