c++ - 如何在共享库中隐藏依赖项的函数名称?
问题描述
我正在 Linux 上构建一个共享库,它引用其他库,如boost
, CryptoPP
, jsoncpp
. 问题是最终的 .so 文件在IDA Pro中包含函数名称:
我认为是因为链接到动态库,所以我构建了boost
静态库,但boost
函数名称仍然可见。
我尝试剥离.so 文件:
strip my.so
strip --strip-unneeded -x my.so
仍然没有运气。
有些竞争对手可能会对我的库进行逆向工程,如何隐藏这些函数名使其更难破解?
解决方案
你应该
- compile with
-fvisility=hidden
(实际导出的函数应该__attribute__((visibility("default")))
在代码中用 - 链接到外部库的静态版本(通过使用
-l:libXYZ.a
语法LDFLAGS
);当然,它们需要存在于您的系统中。