web-dev-qa-db-fra.com

Démontage d'un fichier binaire plat à l'aide de objdump

Puis-je démonter un fichier binaire plat en utilisant objdump?

Je suis familier avec le démontage d'un exécutable binaire structuré tel qu'un fichier ELF en utilisant:

objdump -d file.elf

Mais si j'ai un fichier binaire plat que je sais censé être chargé à, par exemple, l'adresse 0xabcd1000, puis-je demander à objdump de le démonter? J'ai essayé de fournir des options telles que '--start-address = 0xabcd1000' mais objdump indique simplement qu'il ne reconnaît pas le format.

J'ai d'autres idées sur la façon de démonter le fichier, mais je voulais savoir si objdump pouvait fournir une solution simple.

29
Multimedia Mike

J'ai trouvé la solution à ma propre question sur un autre forum. Cela ressemble à ceci:

objdump -b binary --adjust-vma=0xabcd1000 -D file.bin

J'ai testé cela et cela fonctionne.

36
Multimedia Mike

starblue et hlovdal ont tous deux des parties de la réponse canonique. Si vous souhaitez désassembler le code i8086 brut, vous voulez généralement la syntaxe Intel, pas la syntaxe AT&T aussi, alors utilisez:

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 votre code est ELF (ou a.out (ou (E) COFF)), vous pouvez utiliser le formulaire court:

objdump -D -Mintel,i8086 a.out  # disassembles the entire file
objdump -d -Mintel,i8086 a.out  # disassembles only code sections

Pour le code 32 bits ou 64 bits, omettez le ,8086; l'en-tête ELF contient déjà ces informations.

ndisasm, comme suggéré par jameslin , est également un bon choix, mais objdump est généralement fourni avec le système d'exploitation et peut gérer toutes les architectures prises en charge par GNU binutils (surensemble de ceux pris en charge par GCC), et sa sortie peut généralement être introduite dans GNU as (les ndisasm peuvent généralement être introduits dans nasm bien sûr).

Peter Cordes suggère que " l'objconv d'Agner Fog est très agréable. Il met des étiquettes sur les cibles de branche, ce qui facilite beaucoup la compréhension de ce que fait le code. Il peut se désassembler en syntaxe NASM, YASM, MASM ou AT&T (GNU). "

Mike multimédia a déjà découvert --adjust-vma; l'équivalent ndisasm est le -o option.

Pour démonter, par exemple, sh4 code (j'ai utilisé un binaire de Debian pour tester), utilisez-le avec GNU binutils (presque tous les autres désassembleurs sont limités à une seule plate-forme, comme x86 avec ndisasm et objconv):

objdump -D -b binary -m sh -EL x

Le -m est la machine et -EL signifie Little Endian (pour sh4eb utilisation -EB à la place), ce qui est pertinent pour les architectures qui existent dans les deux endianness.

17
mirabilos