【发布时间】:2020-11-26 17:29:25
【问题描述】:
我知道这些是十六进制指令,但它们通常不是 4 字节长吗?
f5: e8 00 00 00 00 callq 0 <main+0xfa>
这是我在运行 objdump --disassemble file.o 时得到的输出中这样一行的一个示例
【问题讨论】:
-
它的意思是
callq 0。不,它们通常不是 4 个字节长。 -
@MichaelPetch 为什么你推荐
-D而不是-d?前者只是将数据部分分解为垃圾,而后者则省略它们。 -
用
objdump --disassemble -r拆解,给你看重定位条目,你会更好理解。 00 00 00 00 是调用目标的位移。但是 00 00 00 00 是一个占位符,当对象成为可执行文件的一部分时,链接器将填写该占位符。您将看到带有 -r 的重定位条目,并且将有一个用于此调用指令。 x86 具有可变长度指令编码,因此并非所有指令的长度都相同 -
@fuz
-D与-d只是我查看时的个人偏好,我不推荐它而不是他们拥有的东西,我的主要目的是为搬迁添加-r.我实际上错过了他的objdump命令在问题中,但并不明显,因为他们没有让它脱颖而出。我已经编辑了他们的问题并修改了我的评论。我的评论都是关于搬迁条目的。我已在我的新评论中将-r添加到 OPs 命令中。 -
@rustyx 1-15 个字节,而不是 1-11 个字节。
标签: c++ linux assembly x86 objdump