【发布时间】:2021-10-21 18:19:51
【问题描述】:
我需要更改共享库 (.so) 文件中的某些符号,如下例所示:
我需要将 .so 文件中的符号 abc 重命名为符号 xyz。我有一个工具可以在头文件中替换它,这只是我在 .so 共享库中更改所面临的挑战。
对于共享库,是否有任何工具或命令可以帮助我反汇编 .so 文件、更新符号并重新组装为 .so 文件?
对于共享库,我们需要一种重建符号表的机制。如果有任何工具可以完成我的任务,需要帮助吗?
仅供参考:更改源是最好的方法,但对于短期的解决方案,它可以帮助在符号级别替换代码字。
【问题讨论】:
-
一般来说修改
.so文件非常困难(例如,您需要重建符号表哈希表)。一个更简单的选择是在一个小型帮助库中重新定义xyz并在其中调用abc。 -
@yugr 在我的情况下编写助手并不容易,因为我需要为成千上万的助手 fns 做。有没有什么工具可以帮助重建符号表和哈希表?
-
我不知道,但您可以查看类似问题的答案here。另请注意,助手将在 asm 中具有非常简单的形式:
.global xyz; .extern abc; xyz: jmp abc,并且可以通过脚本自动生成。
标签: shared-libraries binutils objcopy readelf