有没有什么实用程序可以修补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这样的额外库),但我想知道是否有一些现有的东西我可能会错过。
发布于 2020-08-20 15:33:27
您可以查看ELFIO库的“匿名器”示例。该示例重写了符号的名称。重写symbol的类型也可以类似地实现。但将需要处理“.symtab”节。
这不完全是一个工具,而是一个允许实现这种工具的库。
https://stackoverflow.com/questions/63496685
复制相似问题