2012-07-23 233 views

回答

3

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

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

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

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

找到:here

相关问题