这是我在Mac OS X上使用clang++时遇到的问题的简化版本。为了使问题更真实,对其进行了严格编辑(第一次尝试描述该问题时并未展现问题)。 失败原因: 我有一个大型C++软件,其中目标文件中有大量符号,因此我使用“-fvisibility=hidden”来保持我的符号表小。众所周知,...
我在 Linux 上使用 C 语言工作。我看到了 gcc 的 __section__ 属性的用法(尤其是在 Linux 内核中),可以将数据(通常是函数指针)收集到自定义 ELF 节段中。如何检索并使用放置在这些自定义节段中的 "东西"?
看到问题标题不要误解我的意思 - 我知道它们是什么(可移植可执行文件格式)。但我的兴趣范围略有不同。 我的困惑 我涉及重新主机化/重新定位最初来自第三方的应用程序。问题在于,有时目标代码的格式也是 .elf、.COFF 格式,并且仍然称为“可执行和可链接”。 我主要是 Windows ...
我是指gcc是否可以将一些源代码版本信息插入ELF二进制文件中,例如作为一个段(section)或类似的方式。 我不想改变我的源文件,而是想在Makefile中使用gcc选项来添加一些信息。
我需要能够向ELF文件添加任意节(section)。但是由于此程序中不能使用GPL代码,因此BFD不可行。我可以使用libelf/gelf来读取节,但这些文档相当匮乏,而且我无法弄清如何添加一个节。有人知道怎么做吗?我不想编写自己的ELF代码。
我正在为基于ARM Cortex-M3的微控制器编写汇编程序(使用Thumb 2指令集),使用GNU as。 在一些示例代码中,我发现了像 .size、.section 和 .type 这样的指令,我明白它们是ELF指令。举个例子: .section .text.Reset_Han...
我在 Ubuntu-Linux 11.10 平台上开发了一个小的 C++ 程序。 现在我想要进行逆向工程,但我是初学者。我使用这些工具:GDB 7.0、hte 编辑器和十六进制编辑器。 第一次很容易就做到了。在符号信息的帮助下,我找到了主函数的地址,并完成了所有需要的工作。 然后我去掉了可执...
我正在Linux下编写一个简单的用户空间ELF加载器(为了“好玩”)。目前我的加载器非常简单,并且只设计用于加载包含位置无关代码的静态链接ELF文件。 通常,当程序由内核的ELF加载器加载时,它会被加载到自己的地址空间中。因此,数据段和代码段可以按照ELF段中指定的正确虚拟地址加载。 然而...
我有一个 ELF 32 位 x86 文件,其中包含一个 .eh_frame 部分,尽管我试图1删除它。 我想删除 .eh_frame 部分,而不触动其他部分中的任何符号,包括未使用的符号。 strip 似乎没有 --remove-only 选项,并且它总是会修改其他部分。 如何在不修改文...
当C程序被编译并创建目标文件(ELF)时,目标文件包含不同的段,例如bss、data、text和其他片段。我理解这些ELF的节是虚拟内存地址空间的一部分。如果我理解有误,请纠正我。 此外,编译后的程序将与虚拟内存和页表相关联。页表将ELF中存在的虚拟内存地址与加载程序时的实际物理内存地址关联...