【问题标题】:Redefining symbols from shared library重新定义共享库中的符号
【发布时间】: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


【解决方案1】:

您可以使用 GNU binutils 中的 objcopy 来执行此操作。

objcopy --redefine-sym abc=xyz <input_so_file> [output_so]
objcopy --redefine-syms <Filename> [output_so]

https://linux.die.net/man/1/objcopy

【讨论】:

    猜你喜欢
    • 2016-10-16
    • 2011-02-28
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2018-04-14
    • 2011-07-19
    • 2015-03-08
    • 1970-01-01
    相关资源
    最近更新 更多