问题标签 [objcopy]

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 回答
3179 浏览

gcc - 如何获取当前平台的 BFD 架构规范?

我使用以下方法在 C 程序中嵌入了一个文本文件:http ://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967

objcopy需要使用“--output”选项指定目标。

如何在 Makefile 中设置“--output”,以便 objcopy 使用用户的架构?

谢谢。

0 投票
2 回答
820 浏览

automake - Automake:在二进制目标中嵌入文本文件

我需要在二进制文件中嵌入几个文本文件。目前通过在 configure.in 脚本中添加两行来完成“清理”并对 $target.o 文件执行 objcopy。不要问为什么需要它,在这个应用程序中,它就是。

我想做的是编写一些automake ( Makefile.am ) 定义,将这些文本文件列为源并告诉 make 将它们 objcopy 到我需要与最终目标链接的 *.o 文件中。我也可以将它们添加到我想要的CLEANFILES中。

现在,我知道我说的是final _LDADD,但我找不到告诉 automake/configure 执行该技巧的方法。

帮助...

0 投票
1 回答
2483 浏览

elf - objcopy 参数 --strip-all 删除 ELF 格式的哪些部分?

我确实编译并链接了我的程序,我得到了 ELF32 little endian 的格式,它是这样构建的:

然后我必须使用下面的命令将我的格式更改为二进制。这就是我所听到的。但是谁能告诉我参数“--strip-all”删除了ELF32格式的哪些部分以及二进制格式与ELF32格式有何不同?

我在上面包含了我的 ELF32 格式详细信息,因此您可以(如果可能的话)为移除的部分着色。

非常感谢。

0 投票
3 回答
2747 浏览

c - 是否可以覆盖对象模块(gcc、ld、x86、objcopy)中的静态函数?

有没有办法在对象模块中覆盖具有静态范围的函数?

如果我从这样的东西开始,具有全局符号“foo”的模块是一个调用局部符号“bar”的函数,它调用局部符号“baz”

它有一个全局变量“foo”和两个局部变量“bar”和“baz”。

假设我想写一些练习 bar 和 baz 的单元测试,我可以这样做:

现在 bar 和 baz 是全局符号,可以从模块外部访问。到目前为止,一切都很好。

但是如果我想在“baz”之上插入我自己的函数,并让“bar”调用我插入的“baz”怎么办?

有没有办法做到这一点?

--wrap 选项似乎没有这样做......

从 main() 调用的 baz 被包装了,但 bar 仍然调用本地 baz 而不是包装的 baz。

有没有办法让 bar 调用包装好的 baz?

即使它需要修改目标代码以修改函数调用的地址,如果可以以自动化方式完成,那可能就足够了,但在这种情况下,它至少需要在 i386 和 x86_64 上工作。

——史蒂夫

0 投票
1 回答
811 浏览

linux - 如何从填充部分停止 objcopy

我在 bash (ubuntu linux) 上使用 objcopy,并尝试使用以下推荐从 ELF 文件中复制 2 个部分:

问题是 objcopy 在部分之间添加了一些填充。有没有办法(标志?)可以阻止 objcopy 填充部分?

这些部分在文件中一个接一个地放置,因此不需要任何类型的填充....

0 投票
1 回答
1328 浏览

c++ - 在 MinGW 32 和 64 中包含来自 objcopy 的二进制 blob

我正在使用 objcopy 将文本文件转换为目标文件,以便使用 MinGW 和 MinGW-64 与我的 DLL 链接。使用 MinGW,一切正常,但使用 MinGW-64,我收到“未定义对 `binary_src_glsl_RGBtoHSV_glsl_end' 的引用”形式的错误。原始文件名为 RGBtoHSV.glsl,位于 binary\src\glsl 文件夹中。在 objcopy 的输出中,变量名称是 _binary_src_glsl_RGBtoHSV_glsl_end。我访问该文件变量的代码如下:

如果我更改变量名称以便它们在前面有一个下划线,例如:

然后在 MinGW-64 中找到该符号,但在 MinGW(32 位)中找不到。我确实尝试了 objcopy 的 --remove-remove-leading-char 选项,但这没有效果。据我所见,我的选择是在为 MinGW 32 位构建时使用“--prefix-symbol _”为 objcopy 生成的变量名称添加下划线,在这种情况下,上述变量名称将在 32和 64 位。

这个问题还有其他解决方案吗?理想情况下,我想要一些类似的东西

其中 fix_underscore_problem 是修复前导下划线问题的神奇命令。

更新 (2012-07-01):使用在 Win32 上使用 GCC 将前导下划线添加到程序集符号中给出的建议?我通过头文件更改为使用

这似乎解决了问题,但现在我想知道它的便携性如何。MSVC 或 C++ 标准方法中是否有等效的语法?

0 投票
2 回答
1444 浏览

compilation - Objcopy,它如何进行二进制输出?

由于我是 binutils、gcc 和其他人的新手,所以我有一些一般性的问题,以及我在手册中没有找到的答案。

我正在使用 C 和程序集(nasm 语法),我需要输出原始二进制文件。首先,我将代码编译为带有参数的objec文件:

然后我使用简单的脚本链接所有文件,该脚本只将段按需要的顺序排列。

为了获得原始二进制文件,我使用 objcopy

总而言之,我需要包含 .text 和 .data 段的二进制文件以及 32 位代码。

1.我能以这种方式得到我想要的吗?

2.还有其他方法吗?(无论更简单或更复杂)


谢谢你的帮助。


我没有编译 Asm 代码的问题,几乎所有的 C 代码问题。

0 投票
0 回答
578 浏览

c - 如何在位置无关代码中使用绝对符号

我使用以下推荐创建了一个 elf 文件:

精灵有 3 个绝对符号(binary_start、binray_end、binary_size)

我试图把这个精灵编译成一个共享库。

问题是我在使用 -fpic 时无法到达 size_symbol 和 end_symbol (符号的地址错误)。

那么,在位置无关代码中使用这种符号的正确方法是什么?

0 投票
1 回答
1835 浏览

elf - 如何获取 ELF 存档文件中某个部分的实际位置?

我想从 Linux 中的 .a ELF 存档文件中提取二进制部分。

当我在存档文件上运行 objdump -h 时,它会列出它包含的目标文件以及每个部分的部分标题。但是,“文件偏移”列似乎与存档中的目标文件位置相关,否则它们将所有部分重叠。

我希望我可以使用 dd 从存档文件中提取二进制信息。(请参阅如何仅提取 ELF 部分的内容)。我如何使用存档来做到这一点?

我还应该提到我正在提取的部分是用这个命令添加的:

0 投票
0 回答
6911 浏览

gcc - ARM objcopy 导致空的二进制文件

如何arm-none-eabi-objcopy将我的文件复制/翻译.axf.bin适合闪存到设备的文件lm4tools

我有一个 ~20KB 的.axf文件编译并链接到arm-none-eabi-*. 对于任何有兴趣的人,这是与 Stellaris Launchpad 一起使用的。

我正在尝试修改stellaris-launchpad-template-gcc项目提供的示例以使用 C++ 代码进行编译。我已经设法让它生成一个格式的.axf文件elf32-littlearm(根据.lst文件),但是当我尝试做

要将其转换为可编程文件,.bin文件输出的大小为 0 字节。这个问题描述了一个类似的问题。我确信.axf文件是完整的,为什么我的.bin文件没有填充任何内容?如果我删除-O binary,该文件将被很好地复制。该目录是可写的,所有权限都很好。我已经尝试使用各种术语在 SO 和互联网的其余部分上进行搜索,所有这些都没有任何用处。以前好像没有人遇到过这个问题。

运行arm-none-eabi-objdump -D main.axf会在似乎是汇编程序中生成文件转储:

这是正确的,还是我什至没有正确编译,因为这似乎是某种汇编程序?

关于文件的一些信息.axf

运行后arm-none-eabi-readelf -lS main.axf,不返回程序头: