使用通配符排除仅剥离二进制文件的函数名称
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。
我想以保留某些函数名称的方式剥离我的二进制文件,因为二进制文件是一个共享库,所有其他函数名称都从符号 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。