我无法找到为什么在运行objdump时我的汇编代码中缺少某些字。一行中的“......”代表什么?
答案 0 :(得分:7)
在-d或-D(反汇编)的objdump输出中,通常会有多个只包含省略号的行实例。这只是因为上面和下面的字节之间的所有字节都是空的(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
查看我们反汇编的应用程序,您可以看到省略号出现的位置都是空字节。没有必要多次向用户输出这些内容,因此objdump只是将它们删除。粗体文本是省略号出现的位置。我还应该注意,如果只有一个(32/64位)空字节,objdump会将其显示为 nop 或类似,具体取决于机器。
Offset(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 ....Ï...
答案 1 :(得分:3)
我在objdump中使用了-z参数,它禁止隐藏一些零信息。你应该看到带有零的.word参数。
当你将objdump的输出传递给另一个程序时,这似乎很有用。