问题描述
是否有实用程序修补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”部分。
并非完全是该工具,而是一个允许实施此工具的库。