我有一个我已经反汇编的C ++程序,看起来程序集正在使用指令指针获取字符串文字。例如:
leaq 0x15468(%rip), %rsi ## literal pool for: "special"
和
leaq 0x15457(%rip), %rsi ## literal pool for: "ordinary"
为什么编译器使用指令指针获取字符串文字?对于任何人类程序员而言,这似乎会导致严重的问题,尽管编译器可能并不那么难。
我的问题是为什么?是否存在某些基于机器或历史的原因,或者编译器编写者是否决定任意使用%rip
?
答案 0 :(得分:8)
请记住,C ++中的字符串文字是常量且不可修改。确保这一点的一种方法是将它们与代码段中的代码放在一起,代码段被加载到标记为只读的内存页中。