linux - dlopen 什么时候阻塞?

标签 linux shared-libraries dlopen shared-objects

sharedlibrary通过LD_PRELOAD加载,同库的构造函数调用dlopen("libc.so.6")

问题是dlopen一直在用,调试显示如下 dlopen 调用 __dlopen 调用 calloc 和未知函数 ??, 最后 __GI____pthread_mutex_lock.

如我所料,在 dlopen 之前提供无限资源,但没有解决问题。

只有当 LD_PRELOAD 与目标应用程序 Firefox 在 Linux 上设置 LD_PRELOAD 时才会出现问题,任何其他应用程序都可以正常工作(dlopen 不会阻止) !

最佳答案

when does dlopen blocks?

当它需要一个由于某种原因不可用的锁时。

debugging showes

您需要更多 调试。 dlopen 调用需要 malloc 锁的 calloc。没什么特别的。

必须是某个其他线程持有此 malloc 锁,并正在等待您的 LD_PRELOADed 库完成其初始化(从而产生死锁)。您应该能够找到具有 (gdb) thread apply all where 的其他线程。

您尝试在您的 LD_PRELOADed 库中插入哪些函数也可能很重要。

关于linux - dlopen 什么时候阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48978371/

相关文章:

linux - 如何在 Linux 中查看巨大的文本文件?

支持 PHP Linux 安全模式的文件检查

shared-libraries - 主程序和共享库在 __static_initialization_and_destruction_0 中初始化相同的静态变量

objective-c - GC 能力不匹配0?

Java Chrome Selenium CI 测试随机挂起 3 小时

linux - 无法永久设置环境变量 PATH

c++ - 共享库中的成员函数指针地址

c - 共享库如何链接到符号?

java - 使用 Cloud Dataflow 运行外部库

c - 在 dlopen() 库中返回指向 malloc() 的指针时出现 SIGSEGV