2010-08-13 20 views
18

Chciałbym zmienić nazwy symboli w plikach obiektów (.o) za pomocą czegoś, co byłoby odpowiednikiem Mac binutils 'objcopy --redefine-syms narzędzie.Ekwiwalent objcopy dla Mac/iPhone'a?

Nie znalazłem nr arm-apple-darwin10-objcopy. Próbowałem portu MacPorts "arm-elf-binutils, a także próbowałem grać trochę z otool i segedit bez większego powodzenia.

Wszelkie pomysły proszę?

+0

Czy masz problemy z definiowaniem aliasów, co oznacza, że ​​starsze symbole nadal istnieją? –

+0

co powiesz na 'brew install binutils' i' gobjcopy'? np .: 'gobjcopy --redefine-sym _D4main9foo_test1FZv = _foobar main.o main2.o'; UWAGA: wynikowy plik wykonywalny wydaje się błędny, ale 'nm main2.o | grep _foobar' działa – timotheecour

Odpowiedz

3

Brzmi jak zadanie dla Agner Fog za objconv

objconv announcement

Mam teraz zakończeniu pełnego obsługę plików Mach-O w obiekcie konwerter plików wymienionych w moich poprzednich postach. Możesz użyć go jako zamiennika dla brakującego narzędzia objcopy .

Objconv może być stosowany do następujących celach: Konwersja plików obiektowych i Library/archiwum plików pomiędzy Mach-O, Elf, COFF i formatów OMF dla wszystkich platform x86 i x86-64 . Zmień nazwy w plikach obiektowych, zrób symbole słabe, dodaj nazwy aliasów do symboli.
Budowa, modyfikować i konwertować pliki bibliotek statycznych (* .a * lib) w poprzek platformach (Mac, Linux, BSD, Windows)
plików obiektowych Dump i plików wykonywalnych demontować plików obiektowych i plików wykonywalnych. Bardzo dobry disassembler . Można go pobrać ze strony www.agner.org/optimize/. Kod źródłowy jest dostępny na licencji GPL. Daj mi znać, jeśli chcesz to przetestować. Baw się dobrze!

objconv manual

objconv.zip - source

+0

z FAQ: "11.3 Czy można konwertować pliki dla ARM? Nie. Wiele osób pytało o to, więc istnieje oczywiście zapotrzebowanie na takie narzędzie, ale ja nie zamierzam Objconv obsługuje tylko pliki dla architektur x86 i x86-64. Będzie to wymagać znacznej przeróbki obiektu objconv w celu utworzenia konwertera dla plików ARM. " –

1

objconv aktualnie nie działa na ARM, więc ta opcja nie jest dostępna dla iPhone. Nie powinno być problemu z używaniem objconv od elfa do mach-o dla mac osx x86/x64. Daj mi znać, jeśli znalazł rozwiązanie dla ARM

2

wiem, że wskrzesza ten post z martwych, ale ...

mam nagłą potrzebę, aby to zrobić, jak również, i odkrywania, że ​​robi objcopy Praca nad OSX była trochę szokująca. Ale myślę to możliwe użycie ld aby osiągnąć ten sam efekt:

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

To naprawdę tworzy alias dla symbolu pod nową nazwą i ukrywa starą.

Nie miałem jeszcze okazji wykonać wielu testów, ale patrząc na plik wyjściowy z nm widać, że robi to dobrze.

+0

To polecenie usuwa wszystkie symbole debugowania. Czy wiesz, jak skopiować je z oryginalnego pliku obiektu? – Dmitry

+1

'objcopy' może zmienić nazwy symboli T (symbol przekroju tekstowego) i U (niezdefiniowany). Jednak twoje rozwiązanie 'ld' może obsłużyć tylko ten pierwszy. –

Powiązane problemy