2010-08-13 21 views
18

Mi piacerebbe rinominare i simboli all'interno di file oggetto (.o) con qualcosa che sarebbe l'equivalente Mac dello strumento objcopy --redefine-syms di binutils.Un equivalente objcopy per Mac/iPhone?

Non ho trovato arm-apple-darwin10-objcopy. Ho provato la porta arm-elf-binutils di MacPorts e ho anche provato a giocare un po 'con otool e segedit senza molto successo.

Qualche idea per favore?

+0

Sei OK con la definizione di alias, il che significa che i simboli più vecchi esisteranno ancora? –

+0

per quanto riguarda 'brew install binutils' e' gobjcopy'? es .: 'gobjcopy --redefine-sym _D4main9foo_test1FZv = _foobar main.o main2.o'; NOTA: l'eseguibile risultante sembra sbagliato ma 'nm main2.o | grep _foobar' funziona – timotheecour

risposta

3

Suona come un lavoro per objconv di Agner Fog

objconv announcement

Ora ho finito di fare pieno supporto per i file Mach-O nel convertitore di file oggetto detto nel mio post precedenti. È possibile utilizzarlo come sostituzione per l'utilità objcopy mancante .

Objconv può essere utilizzato per le seguenti finalità : Convertire file oggetto e file biblioteca/archivio tra Mach-O, ELF, COFF e formati OMF per tutti x86 e piattaforme x86-64. Modificare i nomi nei file oggetto, rendere i simboli deboli, aggiungere nomi alias ai simboli.
Costruire, modificare e convertire statici file di libreria (* .a, * lib) attraverso piattaforme (Mac, Linux, BSD, Windows)
file oggetto Dump e file eseguibili file oggetto smontare e file eseguibili. Molto buono disassemblatore. Può essere scaricato da www.agner.org/optimize/. Il codice sorgente è disponibile in GPL. Fammi sapere se vuoi testarlo. Divertiti!

objconv manual

objconv.zip - source

+0

dalle FAQ: "11.3 E 'possibile convertire i file per ARM? No. Un sacco di persone hanno chiesto questo, quindi c'è ovviamente bisogno di un tale strumento, ma io non lo farò Objconv supporta solo i file per le architetture x86 e x86-64 e richiede una riscrittura maggiore di objconv per creare un convertitore per i file ARM. " –

1

objconv attualmente non funziona per ARM, quindi questa opzione non è disponibile per iPhone. Non dovrebbe essere un problema usare comunque objconv da elf a mach-o per mac osx x86/x64. Fatemi sapere se avete trovato una soluzione per ARM

2

So che sto resuscitare questo post dalla morte, ma ...

Ho un improvviso bisogno di fare anche questo, e scoprire che doesn objcopy lavorare su OSX è stato un po 'uno shock. Ma io penso è possibile utilizzare ld per ottenere lo stesso effetto:

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

Questo in realtà solo crea un alias per il simbolo con un nuovo nome e nasconde quello vecchio.

Non ho ancora avuto la possibilità di fare molti test, ma guardando il file di output con nm sembra che stia facendo la cosa giusta.

+0

Questo comando cancella tutti i simboli di debug. Sai come copiarli dal file oggetto originale? – Dmitry

+1

'objcopy' può rinominare i simboli T (simbolo sezione testo) e U (non definito). Tuttavia, la tua soluzione 'ld' può gestire solo la prima. –