c++ - C/C++ 动态链接库重载

标签 c++ c linux shared-libraries glibc

在我的项目中,我需要修改glibc源代码的一些功能。 我只需要修改 pthread 的一部分。比如我在源码中修改了pthread_create.c或者pthread_mutex_lock.c等多线程相关函数。然后,当我的具体程序运行时,我想指定它在需要使用这些功能时使用修改后的功能,并且不会影响其他功能。另外,我不想指定整个版本的glibc当程序正在运行。 我需要寻求你的帮助这个问题有什么好的解决方案吗? 谢谢!! 叮

最佳答案

这是共享库插入器的工作。 Here是一篇优秀的文章。

如果函数在共享库中,则可以指示运行时链接器调用另一个“插入”函数。中介层可以完全取代功能,也可以增强功能。一个很好的例子是 malloc 函数系列,内存泄漏检测器和堆报告工具可以基于用户程序和系统调用之间的一组插入器。

Interposers 仅适用于共享 (.so) 库。静态 (.a) 库直接链接到可执行文件,调用不易被拦截。

Linux 的所有主要版本都支持插入 LD_PRELOAD 功能。

Here是 pthread_create 的示例插入器。

关于c++ - C/C++ 动态链接库重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39317762/

相关文章:

linux - 如何将输入发送到多个终端窗口(不是选项卡)?

c++ - 使用 Fortran 编译和链接 C++

c - sprintf 一个无符号字符数组

c++ - 如何着手一个非常基本的计算机视觉算法

c - 简化补码程序中的运算使用

c - scanf ("%s",输入)不能正常工作

python - 每个 arg 具有多个值的 arg 解析器的最佳实践

linux - 如何从服务中获取 Stdout 到 logstash

c++ - 查找文件末尾的问题?

c# - C 中的 allocVector() 和 System.AccessViolationException : Attempted to read or write protected memory?