使用通配符排除仅剥离二进制文件的函数名称

Stripping only function names of a binary with wildcard exclusion

我想以保留某些函数名称的方式剥离我的二进制文件,因为二进制文件是一个共享库,所有其他函数名称都从符号 table.

中剥离

使用 -g 开关删除所有调试信息,这很好,但不包括函数名称。

如果我使用 --s --wildcard --keep-symbol="blabla_*" --keep-symbol="*blabla*" ... 它仍然剥离太多并破坏兼容性。

有什么方法可以从符号 table 中删除函数名称吗?我考虑过用 ELF parser 重写 ELF 中的函数名称,但它比应该的更乏味,因为它似乎是一个足够常见的用例,可以被 strip 命令支持或其他“标准化”。

If I use --s --wildcard --keep-symbol="blabla_*" --keep-symbol="blabla" ... it still strips too much and breaks compatibility.

您可能感到困惑:因为您的二进制文件是一个共享库,所以它 在其常规符号 table 中不需要任何 符号(由 nm foo.so) -- 它只有需要动态符号table(由nm -D foo.so显示),而strip不需要(可以' t) 从动态符号 table.

中去除任何符号

因此,从共享库中删除 所有 符号是一种常见的做法,这不会破坏兼容性。

它对您的图书馆有用,您并没有讲述全部故事。

P.S。要控制 确切地 哪些符号在动态符号 table 中导出(因此在 strip --strip-all 之后保留)使用链接器版本脚本。有关详细信息,请参阅 this answer