starblue y hlovdal tienen partes de la respuesta canónica. Si desea desensamblar el código i8086 sin procesar, generalmente desea la sintaxis de Intel, no la sintaxis de AT&T, así que use:
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
Si su código es ELF (o a.out (o (E) COFF)), puede usar la forma corta:
objdump -D -Mintel,i8086 a.out # disassembles the entire file
objdump -d -Mintel,i8086 a.out # disassembles only code sections
Para código de 32 bits o 64 bits, omita ,8086; el encabezado ELF ya incluye esta información.
ndisasm, como sugiere jameslin , también es una buena opción, pero objdumpgeneralmente viene con el sistema operativo y puede manejar todas las arquitecturas compatibles con GNU binutils (superconjunto de las compatibles con GCC), y su salida generalmente se puede alimentar a GNU as(los ndisasm generalmente pueden ser alimentados nasm, por supuesto).
Peter Cordes sugiere que “ la objconv de Agner Fog es muy agradable. Coloca etiquetas en los destinos de las ramas, lo que facilita mucho la comprensión de lo que hace el código. Puede desmontarse en sintaxis NASM, YASM, MASM o AT&T (GNU) ".
Multimedia Mike ya se enteró --adjust-vma; el ndisasmequivalente es la -oopción.
Para desensamblar, digamos, sh4código (usé un binario de Debian para probar), use esto con GNU binutils (casi todos los demás desensambladores están limitados a una plataforma, como x86 con ndisasmy objconv):
objdump -D -b binary -m sh -EL x
El -mes la máquina, y -ELsignifica Little Endian (para sh4ebusar -EBen su lugar), que es relevante para arquitecturas que existen en cualquier endianidad.