starblue y hlovdal ambos tienen partes de la respuesta canónica. Si desea desmontar código i8086 prima, normalmente se quiere sintaxis Intel, AT no & sintaxis T, también, a fin de utilizar:
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 el código es ELF (o a.out (o (E) COFF)), se puede utilizar la forma corta:
objdump -D -Mintel,i8086 a.out # disassembles the entire file
objdump -d -Mintel,i8086 a.out # disassembles only code sections
Para el código de 32 bits o de 64 bits, omita el ,8086
; el encabezado ELF ya incluye esta información.
ndisasm
, según lo sugerido por jameslin, es también una buena opción, pero objdump
por lo general viene con el sistema operativo y puede hacer frente a todas las arquitecturas soportadas por GNU binutils (superconjunto de los apoyados por GCC), y su salida por lo general se puede alimentar en GNU as
(ndisasm por lo general se puede alimentar a nasm
, por supuesto).
Peter Cordes sugiere que "Agner Fog's objconv es muy bueno. Coloca etiquetas en los destinos de las ramificaciones, facilitando mucho más descubrir qué hace el código. Se puede desmontar en NASM, YASM, MASM, o AT & T sintaxis (GNU) “
Multimedia Mike ya se enteraron de --adjust-vma
.; el equivalente ndisasm
es la opción -o
.
Para desmontar, por ejemplo, sh4
código (que utiliza uno binario de Debian para probar), utilice esto con GNU binutils (casi todos los otros desensambladores se limitan 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 (por sh4eb
uso -EB
lugar), que es relevante para las arquitecturas que existen en cualquiera endianness.
¿Puedes explicarnos qué hacen las opciones que especifiques? – Hawken
o '--target' en lugar de' -b'. '-D' es" desmontar el contenido de todas las secciones "; '-b bfdname' o' --target = bfdname' forzarán la lectura como formato de código de objeto especificado (no elf sino binario en bruto en nuestro caso); '-m machine' especificará la arquitectura a usar (en nuestro archivo no hay encabezado con información de arco). '-M options' son opciones de desensamblador; 'addr16, data16' se usan para" especificar el tamaño de dirección predeterminado y el tamaño del operando "(tratar el código como i8086 uno en el motor universal de desastres x86) – osgx