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

linux - 如何挂钩特定共享 ELF 库的函数?

LD_PRELOAD 为整个过程挂钩了一些函数,但我只需要通过其名称为一个动态链接库挂钩一个特定的函数。

0 投票
4 回答
41023 浏览

symbols - readelf显示的符号表各列的含义是什么?

有人可以解释符号表中显示的列readelf吗?

0 投票
2 回答
1974 浏览

c - 任何读写二进制文件格式(PE和ELF)的库?

你好,

我想为 Windows 编写一个二进制文件格式查看器,它可以对 PE 和 ELF 文件进行操作。与已经存在的类似:

我有理由要写“又一个二进制查看器”。

是否有任何用于读取 PE 和 ELF 文件格式的 C 库?我下载了 Gnu binutils 的源代码,发现它使用二进制文件描述符库,声称支持大约 50 种文件格式,用于大约 25 种处理器架构。我不确定它是否实现了完整的 PE 规范,因为它基本上是一个很少使用 PE 格式的 Linux 库。此外,库源代码对我来说似乎有点复杂和多余。

0 投票
2 回答
3519 浏览

c - sh_addr 是否总是等于 ELF 文件格式中的 sh_offset?

最近(不再上学了)我一直在自学 ELF 文件格式。我基本上一直在关注这里的文档:http ://www.skyfree.org/linux/references/ELF_Format.pdf 。

一切都很顺利,我编写了这个程序来为我提供有关 ELF 文件部分的信息:

在几个文件上运行几次后,我发现了一些奇怪的东西。'.text' 部分总是从一个非常低的虚拟地址开始(我们说的是小于 1000h)。在用 gdb 研究了一段时间后,我注意到对于每个部分,sh_addr 等于 sh_offset。

这就是我感到困惑的地方 - Elf32_Shdr.sh_addr 被记录为“第一个字节应该驻留的地址”,而 Elf32_Shdr.sh_offset 被记录为“从文件开头到第一个字节的字节偏移量在函数中”。如果这两种情况都是如此,那么对我来说它们都是平等的就没有任何意义。为什么是这样?

现在,我知道有些部分包含未初始化的数据(我认为是.bss),因此该数据不会出现在文件中但会出现在进程的内存中是有道理的。这意味着对于前面提到的每个部分,找出它的虚拟地址将比一个简单的变量复杂得多。

话虽这么说,有没有办法实际确定一个部分的虚拟地址?

0 投票
3 回答
6164 浏览

c++ - ELF 文件格式

我正在尝试将我使用 g++ 编译的 elf 文件的 hexdump 手动加载到我设计的处理器模拟中。一个标准的 elf 文件有 30 个部分,我正在加载所有 30 个段,并考虑到它们的正确内存位置偏移量。然后我在部分 (00400130) 的开头启动我的程序计数器,.text但似乎程序运行不正确。我已经使用 SPIM 作为黄金标准,相对彻底地验证了我的处理器设计。奇怪的是,如果我将一个程序集文件加载到 SPIM 中,然后将软件生成的反汇编文件.text.data部分加载到我的处理器内存中,程序就可以工作。这与我想做的不同,因为我想:

  • 编写一个c++程序
  • 使用 mipseb-linux-g++ 编译它(交叉编译器)
  • 十六进制将所有部分转储到自己的文件中
  • 读取文件并将内容加载到处理器“内存”中
  • 运行程序

我最初应该在 ELF 文件中的哪个位置放置程序计数器?我现在一开始就有.text。另外,我是否只需要包含.text.data让我的程序正常工作?我在这里做错了什么?

0 投票
3 回答
7815 浏览

c - 位置无关代码的区别:x86 vs x86-64

我最近正在构建一个针对 x86-64 架构的某个共享库 (ELF),如下所示:

这失败并出现以下错误:

制作共享对象时,不能使用针对“本地符号”的重定位 R_X86_64_32;使用 -fPIC 重新编译

当然,这意味着我需要将它重新构建为与位置无关的代码,因此它适合链接到共享库中。

但这在具有完全相同构建参数的 x86 上运行良好。所以问题是,x86 上的重定位与 x86-64 有何不同,为什么我不需要-fPIC在前者上编译?

0 投票
4 回答
2721 浏览

c - 用于修改 ELF 二进制文件的动态部分的工具

是否有用于修改 ELF 二进制文件动态部分中的共享库条目的工具?我想显式修改我的二进制文件中的共享库依赖项(即用自定义路径替换现有库的路径)

0 投票
6 回答
7144 浏览

c++ - 编译后的 C++ 类是什么样的?

有了汇编指令和 C 程序的一些背景知识,我可以想象编译函数的样子,但有趣的是,我从来没有仔细考虑过编译后的 C++ 类的样子。

我跑了:

但我得到的东西让我很难理解。

有人可以向我解释或建议一些好的起点。

0 投票
4 回答
1879 浏览

c - struct 的编译定义在 C 中看起来如何?

可能重复:
编译后的 C++ 类是什么样子的?

大家好,

目标文件 struct.o 是 elf 格式。我试图了解这个目标文件包含什么。源代码只是一个结构的定义。这里没有可执行文件,所以文本中应该没有任何内容,也没有真正的数据。那么 struct 的定义到底去哪儿了呢?

我尝试使用;

但不太明白这一点。

谢谢,

贾格拉蒂

0 投票
1 回答
560 浏览

linux - 在 Linux 中修改共享库

是否可以在不获取源代码的情况下在 Linux 中修改共享库(.so)???

我知道 LD_PRELOAD,但这对在共享库本身中使用的函数有用吗???

有没有办法反编译/反汇编然后重新编译/重新组装二进制 ELF 文件?