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