6 ответов:
вы можете использовать objdump. Согласно в этой статье синтаксис:
objdump -D -b binary -mi386 -Maddr16,data16 mbr
Мне нравится
ndisasmдля этой цели. Он поставляется с ассемблером NASM, который является бесплатным и открытым исходным кодом и включен в репозитории пакетов большинства дистрибутивов linux.
ndisasm -b16 -o7c00h -a -s7c3eh mbrобъяснение - от ndisasm manpage
-b= задает 16 -, 32-или 64-разрядный режим. По умолчанию используется 16-битный режим.-o= задает условный адрес загрузки для файла. Этот параметр заставляет ndisasm получать адреса, которые он перечисляет вниз по левому краю, и целевые адреса относительных переходов и вызовов ПК, справа.-a= включает автоматический (или интеллектуальный) режим синхронизации, в котором ndisasm попытается угадать, где должна выполняться синхронизация, путем изучения целевых адресов относительных прыжков и вызовов его разборки.-s= вручную задает адрес синхронизации, так что ndisasm не будет выводить никаких машинных инструкций, которые охватывают байты с обеих сторон адреса. Следовательно, инструкция, которая начинается с этого адреса, будет правильно разобрана.mbr= файл разобранный.
starblue и hlovdal обе части канонического ответа. Если вы хотите разобрать код raw i8086, вам обычно нужен синтаксис Intel, а не синтаксис AT&T, поэтому используйте:
objdump -D -Mintel,i8086 -b binary -m i386 mbr.bin objdump -D -Mintel,i386 -b binary -m i386 foo.bin # for 32-bit code objdump -D -Mintel,x86-64 -b binary -m i386 foo.bin # for 64-bit codeесли ваш код ELF (или A. out (или (E) COFF)), вы можете использовать короткую форму:
objdump -D -Mintel,i8086 a.out # disassembles the entire file objdump -d -Mintel,i8086 a.out # disassembles only code sectionsдля 32-разрядного или 64-разрядного кода опустите
,8086; заголовок ELF уже содержит эту информацию.
ndisasm, как полагают jameslin, это также хороший выбор, ноobjdumpобычно поставляется с ОС и может работать со всеми архитектурами, поддерживаемыми GNU binutils (надмножество тех, которые поддерживаются GCC), и его выход обычно может быть подан в GNUas(ndisasm, как правило, может быть подана вnasmхотя, разумеется).Питер Кордес говорит о том, что " Агнер Фог's objconv очень приятно. Он помещает метки на целевые ветви, что делает намного проще понять, что именно код делает это. Он может разбираться на синтаксис NASM, YASM, MASM или AT&T (GNU)."
Мультимедиа Майк уже узнал о
--adjust-vma; thendisasmэквивалентной .разбирать, скажем,
sh4код (я использовал один двоичный файл из Debian для тестирования), используйте это с GNU binutils (почти все другие дизассемблеры ограничены одной платформой, например x86 сndisasmиobjconv):objdump -D -b binary -m sh -EL xThe
-m- это машина, и-ELозначает маленький Эндиан (дляsh4ebиспользовать-EBвместо этого), что имеет отношение к архитектурам, которые существуют в любой endianness.
Comments