【问题标题】:An objcopy equivalent for Mac / iPhone?Mac / iPhone 的 objcopy 等价物?
【发布时间】:2010-08-13 10:07:26
【问题描述】:

我想重命名目标文件 (.o) 中的符号,使用 Mac 上相当于 binutils 的 objcopy --redefine-syms 工具的名称。

我没有找到arm-apple-darwin10-objcopy。我尝试了 MacPorts 的 arm-elf-binutils 端口,还尝试使用 otoolsegedit 进行一些尝试,但没有取得多大成功。

有什么想法吗?

【问题讨论】:

  • 您是否可以定义别名,这意味着旧符号仍然存在?
  • brew install binutilsgobjcopy 怎么样?例如:gobjcopy --redefine-sym _D4main9foo_test1FZv=_foobar main.o main2.o;注意:生成的可执行文件似乎错误,但 nm main2.o | grep _foobar 有效

标签: macos arm darwin binutils objcopy


【解决方案1】:

听起来像是Agner Fog's objconv 的工作。

来自announcement

我现在已经在我之前的帖子中提到的目标文件转换器中完成了对 Mach-O 文件的完全支持。您可以将它用作缺少的 objcopy 实用程序的替代品。

Objconv 可用于以下目的:
在适用于所有 x86 和 x86-64 平台的 Mach-O、ELF、COFF 和 OMF 格式之间转换目标文件和库/存档文件。

更改目标文件中的符号名称,使符号变弱,为符号添加别名。

跨平台(Mac、Linux、BSD、Windows)构建、修改和转换静态库文件(*.a、*.lib)

转储目标文件和可执行文件

反汇编目标文件和可执行文件。非常好的反汇编程序。

【讨论】:

  • 来自常见问题解答:“11.3 是否可以为 ARM 转换文件?不。很多人都问过这个问题,所以显然需要这样的工具,但我不会制作它。Objconv 仅支持 x86 和 x86-64 架构的文件。它需要对 objconv 进行重大重写才能为 ARM 文件制作转换器。"
【解决方案2】:

我知道我正在从死里复活这个帖子,但是......

我也突然需要这样做,发现objcopy 在 OSX 上不起作用有点令人震惊。但我认为可以使用ld 来达到相同的效果:

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

这实际上只是为符号创建一个新名称的别名并隐藏旧名称。

我还没有机会做很多测试,但是查看带有nm 的输出文件表明它似乎在做正确的事情。

【讨论】:

  • 此命令删除所有调试符号。你知道如何从原始目标文件中复制它们吗?
  • objcopy 可以重命名符号 T(文本部分符号)和 U(未定义)符号。但是,您的ld 解决方案只能处理前者。
【解决方案3】:

objconv 目前不适用于 ARM,因此该选项不适用于 iPhone。不过,对于 mac osx x86/x64 使用从 elf 到 mach-o 的 objconv 应该没有问题。如果你找到了 ARM 的解决方案,请告诉我

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 2011-01-26
    • 2021-12-10
    • 2017-04-04
    • 1970-01-01
    • 2013-12-01
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多