首页 > 解决方案 > 修改已编译共享库中符号的可见性

问题描述

我的项目依赖于一个第三方库,它可以导出更多的符号。其中一些符号被其他库和主程序无意覆盖。

如何更改已编译共享对象的函数和变量的可见性?

标签: shared-librariesvisibilityelf

解决方案


如何更改已编译共享对象的函数和变量的可见性?

您可以通过修改动态符号部分 ( .dynsym) 来更改符号的可见性——它包含一个Elf32_Syms 或Elf64_Syms 的平面数组,您可以覆盖其中的.st_infoand.st_other字段(请参阅此答案)。

我不知道有任何工具可以使这变得简单,您可能必须编写一个自定义程序才能做到这一点。


推荐阅读