我正在使用-s标志查看gcc生成的汇编代码。一些陈述如下所示。
movl is_leader(%rip), destination
此处, is_leader 是C代码中全局定义的 int 类型的变量。我不明白的是这里的术语 is_leader(%rip)。是不是翻录指令指针?我需要知道这句话如何用于访问 is_leader 。
答案 0 :(得分:5)
它要求汇编程序生成代码,该代码将当前指令的地址与对象的地址之间的差异添加或减去指令指针。
这给出了对象的地址而没有生成绝对地址(通常,偏移量适合16或32位,因此生成的代码也更短,因此更快)。
这增加了两个项之间的距离保持不变的约束,因此这只能用于同一个可加载对象中的数据;如果不满足该条件,链接器将标记错误。
答案 1 :(得分:3)
可能与位置无关的代码有关,在* .so可执行文件中。