0

清单文件中括号的含义是什么?例如,

0000001C E8(00000000)

还有其他类型的括号可以吗?它们是什么意思?

4

1 回答 1

3

他们显示了在链接时将应用重定位的位置。

[nnnnnnnn] 显示绝对重定位(链接器执行重定位时,某些节的基地址将添加到偏移量)。例如,一旦二进制完全链接,push str2 指令中的那些字节将被更改为包含.data + 0x09 的基地址。

(nnnnnnnn) 显示 PC 相对重定位(用于调用和分支,其中最终值必须相对于下一条指令的地址)。例如,调用 func2 指令中的字节将使用 func2 的最终地址与下一条指令(调用 func3)的地址之间的差值进行更新。

call func3 指令本身没有括号,因为在这种情况下不需要重定位 - call 指令需要一个相对地址,但 func3 在同一段内,因此相对地址是已知的(以下指令位于 .text + 0x21,而func3在.text + 0x2c,所以无论.text的最终地址如何,相对地址都是0xb)。

发现于:这里

于 2012-07-23T15:55:27.060 回答