为什么我的拆卸C 代码使用指令指针和偏移来获取字符串文字

Why does my disassembled C++ code use the instruction pointer and an offset to get string literals?

本文关键字:获取 文字 字符串 指针 指令 我的 代码 为什么      更新时间:2023-10-16

我有一个我已经拆卸的我的C 程序,而且似乎组件似乎正在使用指令指针来获得字符串文字。例如:

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

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

为什么编译器使用指令指针来获得字符串文字?对于任何人类程序员来说,这似乎会导致令人头疼的头痛,尽管对于编译器来说可能并不难。

我的问题是为什么?是否有一些基于机器或历史原因,或者编译器作家只是决定任意使用%rip

请记住,C 中的字符串文字为常数和不可模拟。确保将它们与代码段中的代码放在一起的一种方法,该代码将其加载到标记为仅读取的内存页面中。