繁体   English   中英

我如何剥离符号表?

[英]How do I strip the symbol table in so?

我用MAC下的strip命令去掉了符号表。 然后我将使用stringsgrep命令检查它。 然后我发现即使是类私有函数名也可以是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

如何去除类中的公共和私有函数名称?

因为在你的输出中有.so我假设你在 Linux 上做所有这些? 如果是,您需要做两件事。

  1. 修改您的构建脚本/制作文件/cmake 列表/您使用的任何构建环境,添加以下编译器开关: -fvisibility=hidden -fvisibility-inlines-hidden您很可能会丢失导出的符号,请在源代码中使用__attribute__((visibility("default")))

  2. 使用操作系统附带的strip二进制文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM