是否可以防止 C 共享库中的函数覆盖?

Posted

技术标签:

【中文标题】是否可以防止 C 共享库中的函数覆盖?【英文标题】:Is it possible to prevent function override in a C shared library? 【发布时间】:2022-01-09 03:45:58 【问题描述】:

我正在使用 GCC 在 C 语言的 Linux 上开发一个共享库。我注意到共享库中的任何函数都可以通过在主应用程序中重新定义来覆盖。有没有办法防止特定函数在共享库中被覆盖?

【问题讨论】:

【参考方案1】:

如果您不需要将该功能导出到世界,请将其设为static

static void a() 

void b() 
    a();

主应用程序将无法直接调用a,但也许你不需要。

如果您还想将该功能导出到世界,您可以这样做:

static void real_a() 
   /* the actual implementation */

void a()  /* wrapper for export */
    real_a();

void b()  /* your library code has to call the real function */
    ...
    real_a();

主应用程序仍然可以覆盖a,但这不会影响库代码,它在内部调用real_a

【讨论】:

这是有道理的。谢谢

以上是关于是否可以防止 C 共享库中的函数覆盖?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用特定于应用程序的值覆盖共享库中的 sass 变量

如何使用 GDB 调试共享对象库中的函数?

C++ 自定义全局新建/删除覆盖系统库

关于 Linux 中的共享库,有没有办法在库中选择导出函数?

iOS 5.1 - GDB 命令或实用程序列出特定共享库中的函数

C ++释放共享库中动态分配的内存导致崩溃