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_PRELOAD
ed 库完成其初始化(从而产生死锁)。您应该能够找到具有 (gdb) thread apply all where
的其他线程。
您尝试在您的 LD_PRELOAD
ed 库中插入哪些函数也可能很重要。
关于linux - dlopen 什么时候阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48978371/