通过LD_PRELOAD
加载的sharedlibrary,同一个库的构造函数调用dlopen("libc.so.6")
问题是dlopen
需要永远,调试显示以下内容
dlopen
调用{_ dlopen
调用calloc
,调用未知函数??,
,然后调用__GI___pthread_mutex_lock
。
在我怀疑dlopen之前提供无限的资源,但没有解决问题。
只有在Linux上使用目标应用程序Firefox
将LD_PRELOAD设置为sharedlibrary(如上所述)时才会出现问题,任何其他应用程序都可以正常工作(dlopen
不会阻塞)!
答案 0 :(得分:0)
何时dlopen阻止?
当需要锁定由于某种原因无法使用时。
调试showes
您需要更多调试。 dlopen
调用calloc
需要malloc锁定。没什么特别的。
必须是某个其他线程持有此malloc锁,并且正在等待您的LD_PRELOAD
ed库完成其初始化(从而产生死锁)。您应该能够找到(gdb) thread apply all where
的其他主题。
您尝试在LD_PRELOAD
ed库中插入的功能可能也很重要。