【问题标题】:Why does objdump show a null opcode for this assembly language instruction?为什么 objdump 显示此汇编语言指令的操作码为空?
【发布时间】:2022-01-05 15:55:55
【问题描述】:

我有以下汇编代码:

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>:
        ...
$

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

【问题讨论】:

  • 空操作码有什么问题?它是有效的。
  • @michael 我会说这可以作为答案,除非您认为应该关闭该问题。不过,对我来说这似乎是一个合理的选择。
  • @CodyGray :我同意,正在寻找可能的重复项,并在您评论时输入了答案。谢谢。
  • 这个问题通常是反过来问的,哈哈

标签: assembly x86 disassembly opcode objdump


【解决方案1】:

这条指令:

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 默认情况下将重复零块打印为...。要更改此行为,请尝试使用 manual 中所述的 -z 选项:

-z --disassemble-zeroes

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

您的命令可能如下所示:

objdump -z -d eax.o 

输出应该类似于:

Disassembly of section .text:

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

【讨论】:

  • 感谢您的回答:))
猜你喜欢
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 2011-01-17
  • 2013-08-19
  • 1970-01-01
相关资源
最近更新 更多