Объективный эквивалент для Mac / iPhone? - PullRequest
22 голосов
/ 13 августа 2010

Я бы хотел переименовать символы внутри объектных файлов (.o) с помощью чего-то, что было бы для Mac эквивалентом инструмента objcopy --redefine-syms binutils.

Я не нашел arm-apple-darwin10-objcopy. Я попробовал порт arm-elf-binutils MacPorts, а также попытался немного поиграть с otool и segedit без особого успеха.

Есть идеи, пожалуйста?

Ответы [ 3 ]

5 голосов
/ 20 июня 2011

Звучит как работа для Агнера Тумана objconv .

Из объявления :

IТеперь мы завершили полную поддержку файлов Mach-O в конвертере объектных файлов, упомянутых в моих предыдущих постах.Вы можете использовать его как замену отсутствующей утилите objcopy.

Objconv можно использовать для следующих целей:
Преобразование объектных файлов и файлов библиотеки / архива между форматами Mach-O, ELF, COFF и OMFдля всех платформ x86 и x86-64.

Изменение имен символов в объектных файлах, ослабление символов, добавление псевдонимов к символам.

Создание, изменение и преобразование файлов статической библиотеки (* .a, * .lib) на разных платформах (Mac, Linux, BSD, Windows)

Дамп объектных файлов и исполняемых файлов

Разборка объектных файлов и исполняемых файлов.Очень хороший дизассемблер.

3 голосов
/ 14 августа 2012

Я знаю, что воскрешаю этот пост из мертвых, но ...

У меня внезапно возникла необходимость сделать это, и обнаружение, что objcopy не работает на OSX, былонемного шока.Но я думаю можно использовать ld для достижения того же эффекта:

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

Это действительно просто создает псевдоним для символа под новым именем и скрывает старое.

У меня еще не было возможности провести большое тестирование, но просмотр выходного файла с nm показывает, что он, кажется, поступает правильно.

1 голос
/ 27 апреля 2012

objconv в настоящее время не работает для ARM, поэтому эта опция недоступна для iPhone.Не должно быть проблем использовать objconv из elf в mach-o для Mac OSX x86 / x64Дайте мне знать, если вы нашли решение для ARM

...