dlopen块什么时候?

时间:2018-02-25 20:55:26

标签: linux shared-libraries dlopen shared-objects

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

问题是dlopen需要永远,调试显示以下内容 dlopen调用{_ dlopen调用calloc,调用未知函数??,,然后调用__GI___pthread_mutex_lock

在我怀疑dlopen之前提供无限的资源,但没有解决问题。

只有在Linux上使用目标应用程序Firefox将LD_PRELOAD设置为sharedlibrary(如上所述)时才会出现问题,任何其他应用程序都可以正常工作(dlopen不会阻塞)!

1 个答案:

答案 0 :(得分:0)

  

何时dlopen阻止?

当需要锁定由于某种原因无法使用时。

  

调试showes

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

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

您尝试在LD_PRELOAD ed库中插入的功能可能也很重要。