2010-08-13 9 views
18

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

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

Любые идеи, пожалуйста?

+0

Вы в порядке с определением псевдонимов, что означает, что старые символы все еще существуют? –

+0

как насчет 'brew install binutils' и' gobjcopy'? например: 'gobjcopy --redefine-sym _D4main9foo_test1FZv = _foobar main.o main2.o'; ПРИМЕЧАНИЕ: результирующий исполняемый файл кажется неправильным, но 'nm main2.o | grep _foobar' работает – timotheecour

ответ

3

Похоже, работа для objconv Agner противотуманной в

objconv announcement

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

Objconv может быть использован для следующих целей : Преобразование объектных файлов и библиотеки/файлов архива между Mach-O, ELF, COFF и OMF форматами для всех x86 и x86-64 платформ. Изменить символ имена в объектных файлах, сделать символы слабыми, добавить псевдонимы в символы.
Build, изменять и преобразовывать статические библиотечных файлы (* .a, * .lib) через платформы (Mac, Linux, BSD, Windows)
объекты Dump файлов и исполняемые файлы Выполните разборку объектных файлов и исполняемых файлов. Очень хорошо дизассемблер. Его можно загрузить с сайта www.agner.org/optimize/. Исходный код доступен под лицензией GPL. Дайте мне знать, если вы хотите протестировать его. Повеселись!

objconv manual

objconv.zip - source

+0

из FAQ: «11.3 Можно ли конвертировать файлы для ARM? Нет. Многие люди спрашивали об этом, поэтому, очевидно, нужен такой инструмент, но я не знаю, Objconv поддерживает только файлы для архитектур x86 и x86-64. Для него требуется переписать objconv, чтобы сделать конвертер для файлов ARM ». –

1

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

2

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

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

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

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

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

+0

Эта команда удаляет все символы отладки. Вы знаете, как их скопировать из исходного объектного файла? – Dmitry

+1

'objcopy' может переименовывать символы T (символ текстового раздела) и U (неопределенные) символы. Однако ваше решение 'ld' может обрабатывать только первое. –