为什么objdump中会有信息缺失?

10

我找不到原因,为什么有时我的汇编代码在运行objdump时会缺失某些单词。一个单独的“...”代表什么?

2个回答

11

在objdump的-d或-D(反汇编)输出中,通常会出现多个仅包含省略号的行。这是因为上下字节之间的所有字节都是null(0x00)。

以下是一个反汇编32位程序的输出。在偏移量00234(+4)和00240之间,在可执行文件中全部是0x00。

40022c: 00000034    0x34
400230: 0000016a    0x16a
400234: 000001ac    0x1ac
  ...
400240: 00000098    0x98
400244: 00000000    nop
400248: 000000a9    0xa9
  ...
400254: 000000cf    0xcf

观察我们反汇编的应用程序,您会发现省略号出现的位置全部为 null 字节。没有必要多次向用户输出这些内容,因此 objdump 简单地将它们删除。加粗的文本是省略号所在的位置。需要注意的是,如果只有一个部分(32/64位)是 null 字节,objdump 会显示为 nop 或类似机器相关的输出。

偏移量(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000220 34 00 00 00 4... 00000230 6A 01 00 00 AC 01 00 00 00 00 00 00 00 00 00 00 j...¬........... 00000240 98 00 00 00 00 00 00 00 A9 00 00 00 00 00 00 00 ˜.......©....... 00000250 00 00 00 00 CF 00 00 00 ....Ï...

5
我使用了objdump的-z参数,这将抑制一些零信息的隐藏。你应该能够看到带有零的.word参数。
当你将objdump的输出传递给另一个程序时,这似乎非常有用。

例如,在ARM Thumb2 ISA中,指令movs r0, r0被编码为0x0000 - Alessandro Bertulli

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