C++ 如何在so中剥离符号表?
我使用MAC下的C++ 如何在so中剥离符号表?,c++,shared-libraries,C++,Shared Libraries,我使用MAC下的strip命令删除符号表。 然后我将使用strings和grep命令检查它。 然后我发现,即使是类私有函数名也可以是grep class ModuleBarn { public: /***/ private: void m_Link( FunctionSet* fs, const char* functionName ); Field* m_FindField( Function* fun, uint32_t argIdx ); Func
strip
命令删除符号表。
然后我将使用strings
和grep
命令检查它。
然后我发现,即使是类私有函数名也可以是grep
class ModuleBarn
{
public:
/***/
private:
void m_Link( FunctionSet* fs, const char* functionName );
Field* m_FindField( Function* fun, uint32_t argIdx );
Function* m_FindCall( const char* functionName, const char* moduleName );
}
alldeMac-mini:~ all$ strip libBootloader.so
alldeMac-mini:~ all$ strings libBootloader.so | grep m_Link
_ZN10ModuleBarn6m_LinkEPNS_11FunctionSetEPKc
如何剥离类中的公共和私有函数名?因为在您的输出中有
。所以我假设您在Linux上执行所有这些操作?如果是,你需要做两件事
修改构建脚本/生成文件/cmake列表/使用的任何构建环境添加以下编译器开关:-fvisibility=hidden-fvisibility inlines hidden
很可能会丢失导出的符号,请在源代码中使用\uuuu属性(可见性(“默认”)
分别标记它们
使用操作系统附带的条带
二进制文件
你为什么要这么做?可以使用c++filt
对名称进行demangle,然后可以针对所需的特定类方法。我不知道你会怎么剥掉它们。