GCC似乎在进行优化,将合并了相同后缀的字符串文字组合在一起。
例如,包含两个字符串文字"foo bar"
和"bar"
的C程序可以以最终的 ELF 形式结束(1)将字符串表更改为具有单个字符串常量"foo bar"
和(2)程序已更改,因此指向"bar"
的任何指针都被转换为现在将4
个字符指向字符串"foo bar"
。请注意,从C语言程序仅向前读取的角度来看,第二个文字仍然看起来像"bar"
。
虽然我认为这是一种压缩字符串集合而不增加 ELF 文件格式复杂度的聪明方案,但出于深奥的原因,这也给我带来了麻烦(在后处理< em> ELF 文件并对其进行各种分析)。如何关闭GCC的此功能?