-->

An objcopy equivalent for Mac / iPhone?

2020-02-10 11:52发布

问题:

I would like to rename symbols inside object files (.o) with something that would be the Mac equivalent of binutils' objcopy --redefine-syms tool.

I found no arm-apple-darwin10-objcopy. I tried the MacPorts' arm-elf-binutils port and also tried to play a bit with otool and segedit without much success.

Any ideas please?

回答1:

Sounds like a job for Agner Fog's objconv.

From the announcement:

I have now finished making full support for Mach-O files in the object file converter mentioned in my previous posts. You may use it as a replacement for the missing objcopy utility.

Objconv can be used for the following purposes:
Convert object files and library/archive files between Mach-O, ELF, COFF and OMF formats for all x86 and x86-64 platforms.

Change symbol names in object files, make symbols weak, add alias names to symbols.

Build, modify and convert static library files (*.a, *.lib) across platforms (Mac, Linux, BSD, Windows)

Dump object files and executable files

Disassemble object files and executable files. Very good disassembler.

  • objconv manual

  • objconv.zip - source



回答2:

I know I'm resurrecting this post from the dead, but...

I have a sudden need to do this as well, and discovering that objcopy doesn't work on OSX was a bit of a shock. But I think it's possible to use ld to achieve the same effect:

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

This really just creates an alias for the symbol under a new name and hides the old one.

I haven't had a chance to do much testing yet, but looking at the output file with nm shows it seems to be doing the right thing.



回答3:

objconv does not currently work for ARM, so this option is not available for iPhone. It should be no problem to use objconv from elf to mach-o for mac osx x86/x64 though. Let me know if you found a solution for ARM