为什么我的反汇编C ++代码使用指令指针和偏移来获取字符串文字?

时间:2017-05-31 15:09:06

标签: c++ assembly x86-64

我有一个我已经反汇编的C ++程序,看起来程序集正在使用指令指针获取字符串文字。例如:

leaq    0x15468(%rip), %rsi ## literal pool for: "special"

leaq    0x15457(%rip), %rsi ## literal pool for: "ordinary"

为什么编译器使用指令指针获取字符串文字?对于任何人类程序员而言,这似乎会导致严重的问题,尽管编译器可能并不那么难。

我的问题是为什么?是否存在某些基于机器或历史的原因,或者编译器编写者是否决定任意使用%rip

1 个答案:

答案 0 :(得分:8)

请记住,C ++中的字符串文字是常量且不可修改。确保这一点的一种方法是将它们与代码段中的代码放在一起,代码段被加载到标记为只读的内存页中。