为什么objdump显示此汇编语言指令的空操作码?

3
我有以下汇编代码:
global _start
section .text
_start:

add byte [eax], al

编译和链接后,我试图查看操作码:

$ objdump -d eax.o

eax.o:     file format elf32-i386


Disassembly of section .text:

00000000 <_start>:
        ...
$

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

1
空操作码有什么问题吗?它是有效的。 - Seva Alekseyev
1
@michael 我认为这已经算是一个答案了,除非你认为这个问题应该被关闭。在我看来,这是一个合理的问题。 - Cody Gray
@CodyGray:我同意,正在寻找可能的重复内容,正当我在撰写答案时,你发表了评论。谢谢。 - Michael Petch
2
通常这个问题是反过来问的,哈哈。 - harold
1个回答

7
这条指令:
add byte [eax], al

这被编码为两个字节的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.
默认情况下,OBJDUMP 会将重复的零块打印为 ...。如果要更改此行为,请尝试使用如手册中所述的-z选项进行操作:

-z --disassemble-zeroes

通常,反汇编输出将跳过零块。该选项指示反汇编器对这些块进行反汇编,就像处理其他数据一样。

您的命令可能如下所示:
objdump -z -d eax.o 

输出应该类似于:
Disassembly of section .text:

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

1
谢谢你的回答 :)) - Febriyanto Nugroho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接