Дизассемблер Linux Mach-O

Существуют ли какие-либо программы для Linux, которые могут дизассемблировать универсальный двоичный файл Mach-O для OSX x86/x86_64, например objdump? objdump GNU binutils поддерживает файлы ELF и Windows PE, но не Mach-O.


person Jeff    schedule 03.01.2012    source источник
comment
Вы уверены, что binutils не поддерживает Mach-O? Возможно, вам нужно настроить его для этого и перекомпилировать (конечно, ваш стандартный дистрибутив binutils не поддерживает его, потому что ему это не нужно)?   -  person Basile Starynkevitch    schedule 03.01.2012
comment
Я где-то читал, что GNU binutils его не поддерживает. Я просто предположил, что порт Mac был изменен для его поддержки. Это не тот случай, как описывает @Brett Hale.   -  person Jeff    schedule 03.01.2012


Ответы (5)


Насколько я знаю, собственные бинарные инструменты Darwin являются частью пакета cctools. Они не имеют такого же синтаксиса командной строки или вывода, как GNU binutils. Однако более поздние версии binutils (например, 2.22) поддерживают формат Mach-O. Вы можете получить их предварительно собранными с префиксом «g» к именам инструментов, как указано здесь. Кроме того, вы можете скомпилировать binutils с помощью чего-то вроде:

> ./configure --prefix=$CROSSTOOLDIR --target=x86_64-apple-darwin \
--enable-64-bit-bfd --disable-nls --disable-werror

При установке будет создан каталог bin/, в котором утилиты имеют префикс x86_64-apple-darwin. Он должен нормально обрабатывать формат i386 Mach-O (и двоичные файлы FAT).

person Brett Hale    schedule 03.01.2012
comment
Просто для ясности, это для создания binutils специально для Mac OSX? Не для Linux, как в исходном вопросе? - person James McMahon; 17.10.2013
comment
@JamesMcMahon - это должно работать на любом из них. --target — это архитектура/ABI, которую анализируют инструменты. --host указывает платформу, на которой будут работать инструменты. Обычно --host по умолчанию соответствует значению, возвращаемому config.guess. - person Brett Hale; 17.10.2013

Что касается ответа Джеффа:

Bintuils не включает поддержку связывания (ld/gld) для mach или даже в текущей версии 2.23, что действительно разочаровывает, но не удивляет. К сожалению, это то, что происходит, когда вы создаете ОС и заново изобретаете вещи, «которые на самом деле не нужно изобретать заново». У всех разные приоритеты. Я до сих пор не слышал окончания a.out vs elf от некоторых людей.

хотите попробовать запустить двоичные файлы ELF на OSX? https://stackoverflow.com/a/2613170/1867574

person Paige Thompson    schedule 30.11.2012

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

person 0xced    schedule 21.03.2013

Я думаю, вам нужно otool. Он включен в mac osx command tools. Например, если вы хотите дизассемблировать a.out, все, что вам нужно сделать, это ввести otool -tv a.out в командной строке.

person Douglas Su    schedule 02.08.2014

Несколько известных инструментов для обратного проектирования двоичных файлов Mach-O — это otool , strings, nm, otx и т. д. Это определенно работает на MAC OSX, я думаю, что это работает и на платформе Linux.

person Anil    schedule 03.01.2012
comment
да... otool - это линейный инструмент командной строки OSX... Существует альтернативный инструмент для платформы Linux.. Погуглите и найдите его! - person Anil; 17.12.2013
comment
Подскажите, пожалуйста, альтернативу otool на ubuntu? - person Rohit saraf; 31.01.2019