为什么字符串显示在共享库文件中,如 Linux 中的 .so 文件?

Why string shown up in Shared Library file like .so file in Linux?

我可以知道为什么 linux 中的 .so 文件会显示来自我的 cpp 代码的字符串值吗?即使在 gcc make 中设置了 fvisibility=hidden。

例如,我设置“Hello World”,它就会出现。

我尝试了 google 但没有发现任何相关内容..

谢谢。

-fvisibility=hidden 只影响 linker 的可见性,即当 linker 试图 link 您的文件时符号是否可见。它没有指定任何活动混淆。

您的字符串仍放置在数据部分中,需要在加载库时加载到进程的内存中 space,因此在检查文件时它们仍然需要可见。如果您需要对它们进行混淆,您将需要自己对它们进行混淆并在运行时对其进行解码(知道足够坚定的攻击者仍然可以对您的库进行逆向工程或调试)。