如何解决在可重定位的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”部分。
并非完全是该工具,而是一个允许实施此工具的库。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。