我有一个C++程序,我已经反汇编它,看起来汇编使用指令指针来获取字符串文字。例如:
leaq 0x15468(%rip), %rsi ## literal pool for: "special"
和
leaq 0x15457(%rip), %rsi ## literal pool for: "ordinary"
编译器为什么要使用指令指针来获取字符串字面值?这似乎会给任何人类程序员带来很大的麻烦,尽管对于编译器来说可能不是那么难。
然而,我的问题是——为什么呢? 是有某些基于机器或历史原因,还是编译器作者只是随意使用了 %rip
?
0x15468
和0x15457
中,这是位移。您的反汇编器以这种形式显示指令。另一个反汇编程序可以以另一种形式显示相同的指令-显示计算出的有效地址而不是位移-但这只是不同的可视化形式。 - RbMm[rip-0x80000000,rip+0x7fffffff]
内存范围。这样指令就为我们节省了4个字节。 - RbMm[rip-0x80000000, rip+0x7fffffff]
内。 - RbMm