在可重定位的ELF符号表中“取消定义”符号的工具

问题描述

是否有实用程序修补ELF符号表中的任意符号,以使已定义符号变为未定义?例如,这里readelf --syms是我要处理的文件

Symbol table '.symtab' contains 8 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     ...
     5: 0000000000000000    13 FUNC    WEAK   DEFAULT    3 my_message
     6: 0000000000000000    19 FUNC    GLOBAL DEFAULT    5 print_msg
     7: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND puts

以下是my_message未定义的相同二进制文件的预期输出:

Symbol table '.symtab' contains 8 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     ...
     5: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND my_message
     6: 0000000000000000    19 FUNC    GLOBAL DEFAULT    5 print_msg
     7: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND puts

ELF文件本身是可重定位的。修改只能更改符号表。包含原始符号定义的实际部分应保持不变。 我检查了GNU Binutils,发现objcopy可能就是我想要的,但是到目前为止,我还没有找到能使我得到上述行为的任何选项(或组合)。

实际上,这样的工具应该足够容易实现(即使没有像BFD这样的额外库),但我想知道是否还有一些我可能会错过的东西。

解决方法

您可以看一下ELFIO库的“ anonymizer”示例。该示例覆盖符号的名称。符号类型的覆盖可以类似地实现。但是将需要处理“ .symtab”部分。

并非完全是该工具,而是一个允许实施此工具的库。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...