我有一个带有符号剥离的共享库。使用已知方法/工具获取符号名称(例如nm -D
,objdump
,readelf
等),我发现所有符号实际上都是隐藏的。
但是,如果我在共享库上运行strings
linux工具,我可以看到其中一些符号暴露出来。我确保我不会在消息中打印任何这些符号,但它仍然以某种方式打印出我希望被剥离的符号。
所以,我的问题是,即使从linux中的strings
命令行工具,我怎么能隐藏我的符号?任何帮助将不胜感激。
编辑:
我使用strip -strip--all
隐藏静态符号,我还启用-fvisibility=hidden
编译标志来隐藏不需要的动态符号。
答案 0 :(得分:1)
取自man strings
:
说明
对于给定的每个文件,GNU
strings
打印至少4个字符长的可打印字符序列。
strings
与您提到的工具(readelf
,objdump
等)之间的区别在于那些主要依赖于ELF对象中嵌入的DWARF信息,而strings
{1}}实用程序从二进制数据输出 ANY 可打印序列(DWARF无关)。
如何在strings
实用程序中隐藏我的符号: this可能会有所帮助。