2010-08-13 105 views
18

我想用与Binutils的objcopy --redefine-syms工具Mac相同的东西来重命名对象文件(.o)中的符号。我发现没有arm-apple-darwin10-objcopy。我尝试了MacPorts的arm-elf-binutils端口,并试图与otoolsegedit玩点儿没有太大的成功。Mac/iPhone的objcopy等价物?

有什么想法吗?

+0

您可以定义别名,这意味着旧的符号仍然存在? – 2011-03-28 15:28:55

+0

'brew install binutils'和'gobjcopy'怎么样?例如:'gobjcopy --redefine-sym _D4main9foo_test1FZv = _foobar main.o main2.o';注意:由此产生的可执行文件似乎是错误的,但是'nm main2.o | grep _foobar'从常见问题解答中工作 – timotheecour 2018-01-25 23:02:04

回答

3

听起来像是昂纳雾的objconv

objconv announcement

现在我已经完成制作在我 先前的文章中提到的目标 文件转换器的Mach-O文件的完整 支持工作。您可以将其用作替代丢失的objcopy 实用程序的 。

Objconv可用于以下用途 :将所有的x86 和x86-64平台的Mach-O, ELF,COFF和OMF格式之间的目标文件和库 /归档文件。在目标文件中更改符号 名称,使符号 变弱,为符号添加别名。
建立,修改和转换静态 库文件(*。A,* .LIB)跨平台 (苹果机,Linux,BSD,Windows)中
转储对象文件和可执行文件 拆卸目标文件和 可执行文件。很好的 反汇编器。可从www.agner.org/optimize/下载 。源代码可在GPL下获得。 让我知道你是否想测试它。玩的开心!

objconv manual

objconv.zip - source

+0

:“11.3是否有可能将文件转换为ARM? 不是。很多人都问过这个问题,所以显然需要这样一个工具,但我不会使用这种工具它只支持x86和x86-64体系结构的文件, 需要重写objconv才能为ARM文件创建一个转换器。 – 2013-07-25 18:41:29

1

objconv目前没有工作的ARM,所以这个选项不适用于iPhone。尽管如此,使用elf的objconv对mac osx x86/x64使用mach-o应该没问题。让我知道如果你找到了ARM

2

我知道我复活这个职位从死里复活的解决方案,但是...

我有一个突然需要做到这一点为好,并发现,objcopy没有按在OSX上工作有点令人震惊。但我认为可能使用ld来达到同样的效果:

ld -r input.o -o output.o -alias oldsymbol newsymbol -unexported_symbol oldsymbol 

这真的只是创造了一个新的名称符号的别名,隐藏了旧的。

我还没有机会做很多测试,但看着输出文件nm显示它似乎做的是正确的事情。

+0

该命令删除所有调试符号。你知道如何从原始对象文件中复制它们吗? – Dmitry 2013-07-23 12:11:21

+1

'objcopy'可以重命名符号T(文本部分符号)和U(未定义)符号。但是,你的'ld'解决方案只能处理前者。 – 2014-02-27 00:11:57