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 objdump
generalmente 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 ndisasm
equivalente es la -o
opción.
Para desensamblar, digamos, sh4
có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 ndisasm
y objconv
):
objdump -D -b binary -m sh -EL x
El -m
es la máquina, y -EL
significa Little Endian (para sh4eb
usar -EB
en su lugar), que es relevante para arquitecturas que existen en cualquier endianidad.