An objcopy equivalent for Mac / iPhone?
Asked Answered
E

3

26

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?

Employment answered 13/8, 2010 at 10:7 Comment(2)
Are you OK with defining aliases, which means that older symbols will still exists ?Solecism
how about brew install binutils and gobjcopy? eg: gobjcopy --redefine-sym _D4main9foo_test1FZv=_foobar main.o main2.o; NOTE: the resulting executable seems wrong but nm main2.o | grep _foobar worksBlythebm
L
5

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.

Lexis answered 20/6, 2011 at 6:27 Comment(1)
from the FAQ: "11.3 Is it possible to convert files for ARM? No. A lot of people have asked about this, so there is obviously a need for such a tool, but I am not gonna make it. Objconv supports only files for x86 and x86-64 architectures. It will require a major rewrite of objconv to make a converter for ARM files."Pangolin
B
3

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.

Biagio answered 14/8, 2012 at 11:56 Comment(2)
This command deletes all debug symbols. Do you know how to copy them from the original object file?Chokedamp
objcopy can rename symbols T (text section symbol) and U (undefined) symbols. However, your ld solution can only handle the former.Regicide
B
1

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

Blinker answered 27/4, 2012 at 1:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.