使用 objcopy 从原始二进制文件创建对象时如何指定符号名称?

问题描述 投票:0回答:1

在此答案中所述,GNU

objcopy
可用于从任意文件内容创建目标文件。该方法可用于将资源嵌入到程序中。但是,符号名称是由输入文件名生成的。

例如,如果您运行:

objcopy --input binary --output elf64-x86-64 --binary-architecture i386:x86-64 myfile.txt myfile.o

生成的目标文件将包含

_binary_myfile_txt_start
_binary_myfile_txt_end
_binary_myfile_txt_size
,它只是用
_
替换非字母数字字符。

但是,当我处理不同目录中的文件

foo.bar
foo_bar
,甚至多个
foo.bar
时,符号将是相同的。那么有没有办法在输出目标文件中手动指定符号以避免冲突?

linker binutils object-files symbol-table objcopy
1个回答
0
投票

但是,当我处理文件 foo.bar 和 foo_bar,甚至不同目录下的多个 foo.bar 时,

您似乎极不可能从单个目录中嵌入 both

foo.bar
foo_bar
。如果这样做,您始终可以使用不同的名称创建副本(或符号链接),并嵌入 that

多个目录似乎也不是真正的问题:如果您使用目录路径,名称最终为

_binary_relative_dir_foo_bar_start
_binary__absolute_dir_foo_bar_start

那么有没有办法在输出目标文件中手动指定符号以避免冲突?

不,名称被硬编码在

binutils/bfd/binary.c
这里

© www.soinside.com 2019 - 2024. All rights reserved.