【发布时间】:2017-01-12 01:36:34
【问题描述】:
在我的项目中,我需要修改glibc源代码的一些功能。 我只需要修改部分pthread。比如我在源码中修改了pthread_create.c或pthread_mutex_lock.c等多线程相关函数。然后,当我的具体程序运行时,我想指定它在需要使用这些功能时使用修改后的功能,并且不会影响其他功能。另外,我不想指定整个版本的glibc程序正在运行。 我需要寻求您的帮助,这个问题有什么好的解决方案吗? 谢谢!! 丁
【问题讨论】:
-
为什么不简单地使用其他名称而不是替换标准函数?
-
您的意思是要替换某些 glibc 函数的所有实例并保留其他函数的实现?在这种情况下,您可能会成功使用 LD_PRELOAD 从包含替换函数的 SO 中加载符号。
-
感谢您的帮助。实际上,我需要在pthread函数内部获取一个特定的参数,例如系统分配的线程ID。所以我在函数内部插入了一个例程并重新编译了修改后的glibc,然后使用一个插桩工具来插桩我的例程以获得参数。正如你所建议的,我想重写pthread函数,但是我被glibc源代码中复杂的关系调用阻止了。所以我试图重新编译整个glibc并预加载libpthread.so。但它不能工作如果系统glibc版本与我的不同。我很困惑。
标签: c++ c linux shared-libraries glibc