C++ 如何在so中剥离符号表?

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

我使用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 );
    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,然后可以针对所需的特定类方法。我不知道你会怎么剥掉它们。