2016-07-11 18 views
2

Ich habe folgende Assembler-Code:Warum zeigt objdump einen Null-Opcode für diese Assemblersprachanweisung an?

global _start 
section .text 
_start: 

add byte [eax], al 

Nach dem Kompilieren und Verknüpfen, ich versuche, den Opcode zu sehen:

$ objdump -d eax.o 

eax.o:  file format elf32-i386 


Disassembly of section .text: 

00000000 <_start>: 
     ... 
$ 

Warum ich ein Null-Opcode bekommen Sie?

+1

Und was mit null Opcode falsch:

objdump -z -d eax.o 

Der Ausgang etwas aussehen sollte? Es ist gültig. –

+1

@michael Ich würde sagen, dass dies eine Antwort ist, es sei denn, Sie denken, dass die Frage stattdessen geschlossen werden sollte. Sieht für mich jedoch vernünftig aus. –

+0

@CodyGray: Ich stimme zu, suchte nach einem möglichen Duplikat und tippte die Antwort wie Sie kommentiert. Vielen Dank. –

Antwort

4

Diese Anweisung:

add byte [eax], al 

Wird als zwei Byte ADD Anweisung 0x00 0x00 codiert:

Opcode Instruction  Op/En 64-bit Mode Compat/Leg Mode Description 
00 /r  ADD r/m8, r8 MR  Valid  Valid   Add r8 to r/m8. 

objdump wird standardmäßig Blöcke wiederholt Nullen als ... drucken. Um dieses Verhalten zu ändern versuchen, die -z Option wie im manual beschrieben:

-z --disassemble-Nullen

Normalerweise ist die Demontage Ausgang Blöcke von Nullen überspringen. Diese Option weist den Disassembler an, diese Blöcke wie alle anderen Daten zu demontieren.

Ihr Befehl könnte wie folgt aussehen:

Disassembly of section .text: 

00000000 <_start>: 
    0: 00 00     add %al,(%eax) 
+1

Vielen Dank für die Beantwortung :)) –