为什么objdump为这个汇编语言指令显示一个空操作码?

Feb*_*oho 4 x86 assembly opcode objdump disassembly

我有以下汇编代码:

global _start
section .text
_start:

add byte [eax], al
Run Code Online (Sandbox Code Playgroud)

编译和链接后,我尝试看到操作码:

$ objdump -d eax.o

eax.o:     file format elf32-i386


Disassembly of section .text:

00000000 <_start>:
        ...
$
Run Code Online (Sandbox Code Playgroud)

为什么我得到一个空操作码?

Mic*_*tch 6

这条指令:

add byte [eax], al
Run Code Online (Sandbox Code Playgroud)

编码为两字节ADD指令0x00 0x00:

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.
Run Code Online (Sandbox Code Playgroud)

默认情况下,OBJDUMP将打印重复零的块作为....要更改此行为,请尝试使用手册中-z所述的选项:

-z --disassemble-zeroes

通常,反汇编输出将跳过零块.该选项指示反汇编程序反汇编这些块,就像任何其他数据一样.

您的命令可能如下所示:

objdump -z -d eax.o 
Run Code Online (Sandbox Code Playgroud)

输出应该类似于:

Disassembly of section .text:

00000000 <_start>:
   0:   00 00                   add    %al,(%eax)
Run Code Online (Sandbox Code Playgroud)