1

我有一个已经编译/链接的 DSO 文件,它导出了一些确实必须隐藏的函数。当我尝试将我的代码与该库链接时 - 它会选择那些不需要的符号而不是我自己的符号。我无法访问源代码,因此我无法重建二进制文件并为不需要的东西使用适当的可见性属性。

我在这里看到唯一的一种解决方案 - 将不需要的符号形式GLOBAL的可见性HIDDEN直接更改为二进制。进行这种更改的明显工具是objcopy,但问题是objcopy没有修改动态符号表的选项,它只能处理常规符号表。

那么有谁知道哪个工具可以让我改变动态符号表中符号的可见性?

4

1 回答 1

1

如果你想改变符号的绑定方式,你应该使用审计模块。这样,您就不必修补磁盘上的文件。

但是,根据您的描述尚不清楚这是否真的有必要。使用正确的链接顺序,您的新符号定义将自动插入现有的符号定义(无需审计模块)。如果这不是您想要的,您应该考虑重命名您的符号,以避免名称冲突。

于 2018-03-11T09:43:10.570 回答