【发布时间】:2011-11-14 12:52:54
【问题描述】:
我正在查看 gcc 使用 -s 标志生成的汇编代码。一些语句如下所示。
movl is_leader(%rip), destination
这里,is_leader 是 C 代码中 int 类型的全局定义变量。我不明白的是这里的术语 is_leader(%rip) 。 rip 不是指令指针吗?我需要知道如何使用此语句访问 is_leader。
【问题讨论】:
我正在查看 gcc 使用 -s 标志生成的汇编代码。一些语句如下所示。
movl is_leader(%rip), destination
这里,is_leader 是 C 代码中 int 类型的全局定义变量。我不明白的是这里的术语 is_leader(%rip) 。 rip 不是指令指针吗?我需要知道如何使用此语句访问 is_leader。
【问题讨论】:
它要求汇编器生成代码,将当前指令的地址与对象地址之间的差加或减到指令指针中。
这给出了对象的地址而不生成绝对地址(通常,偏移量适合 16 或 32 位,因此生成的代码也更短,因此更快)。
这增加了两个项目之间的距离保持不变的约束,所以这只能用于同一个可加载对象中的数据;如果不满足该条件,链接器将标记错误。
【讨论】:
可能与 *.so 可执行文件中的位置无关代码有关。
【讨论】: