Существуют ли какие-либо программы для Linux, которые могут дизассемблировать универсальный двоичный файл Mach-O для OSX x86/x86_64, например objdump? objdump GNU binutils поддерживает файлы ELF и Windows PE, но не Mach-O.
Дизассемблер Linux Mach-O
Ответы (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).
--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
Вы можете дизассемблировать двоичные файлы Mach-O в Linux с помощью Hopper. В отличие от objdump, у него очень приятный графический интерфейс.
Я думаю, вам нужно otool
. Он включен в mac osx command tools
. Например, если вы хотите дизассемблировать a.out
, все, что вам нужно сделать, это ввести otool -tv a.out
в командной строке.
Несколько известных инструментов для обратного проектирования двоичных файлов Mach-O — это otool , strings, nm, otx и т. д. Это определенно работает на MAC OSX, я думаю, что это работает и на платформе Linux.
binutils
не поддерживает Mach-O? Возможно, вам нужно настроить его для этого и перекомпилировать (конечно, ваш стандартный дистрибутивbinutils
не поддерживает его, потому что ему это не нужно)? - person Basile Starynkevitch   schedule 03.01.2012