2015-06-19 43 views
2

我有一個共享庫的符號被剝離。使用已知的方法/工具來獲取符號名稱(如nm -Dobjdump,readelf等),我看到所有符號實際上都是隱藏的。被剝離的符號不能隱藏字符串linux工具

但是,如果我在我的共享庫上運行了strings linux工具,我可以看到一些暴露的符號。我確信我不會在消息中打印任何這些符號,但它仍然以某種方式打印我期望被剝離的符號。

所以,我的問題是,我怎麼能隱藏我的符號,即使從linux的strings命令行工具?任何幫助,將不勝感激。


編輯: 我使用strip -strip--all隱藏靜態符號,我也讓-fvisibility=hidden編譯標誌來隱藏不需要的動態符號。

+0

請參見[這裏](http://www.muppetlabs.com/~breadbox/software/elfkickers.html)「sstrip」。 – 4566976

+0

如果這是一個C++庫,請考慮編譯時不使用RTTI('-fno-rtti')以避免通過包含的類型信息泄漏符號。 (禁用RTTI也有助於使逆向工程更難)。 – nneonneo

+0

它實際上是一個C庫,所以我不能使用-fno-rtti – sasfour

回答

0

man strings摘自:

說明

對於給定的,GNU strings印刷品是至少4個字符長的可打印字符序列的每個文件。

和由你(readelfobjdump等)提到的工具strings之間的區別是,那些主要依靠嵌入在ELF對象的DWARF信息,而strings效用輸出ANY可印刷從序列二進制數據(DWARF無關)。

如何隱藏我的符號甚至從strings實用程序:this可能會有所幫助。