Linux 调试dlopen()句柄的后期处理?

Linux 调试dlopen()句柄的后期处理?,linux,gdb,dlopen,Linux,Gdb,Dlopen,我有一个corefile,想调试dlopen()返回的句柄,例如,验证该句柄是否仍然完整dlsym()在句柄上调用的函数表示堆栈跟踪中的this=0x0。是否有关于dlopen()句柄背后的内容的描述?或者我必须检查libdl。因此源代码?可能会失败,并在这种情况下给出NULL。您应该始终针对此类故障进行测试(请参阅)。我猜在您的案例中,一些dlopen失败了,但您忘记了测试它(这可以解释gdb在dlsym中报告的this=0)。但是,在Linux上,您可以成功地执行成千上万的dlopen-s,

我有一个corefile,想调试
dlopen()
返回的句柄,例如,验证该句柄是否仍然完整
dlsym()
在句柄上调用的函数表示堆栈跟踪中的
this=0x0
。是否有关于
dlopen()
句柄背后的内容的描述?或者我必须检查
libdl。因此
源代码?

可能会失败,并在这种情况下给出
NULL
。您应该始终针对此类故障进行测试(请参阅)。我猜在您的案例中,一些
dlopen
失败了,但您忘记了测试它(这可以解释
gdb
dlsym
中报告的
this=0
)。但是,在Linux上,您可以成功地执行成千上万的
dlopen
-s,请参见我的示例。当然,您不应该将其与
NULL
共享对象句柄一起使用(否则,它将与可能的句柄一起使用)

要查找,特别是在Linux上,给定它可能属于哪个函数的某个地址,您可以使用

请注意,文件知道
mmap
-ed内存段(除非它们可能不完整,因为您使用
RLIMIT_CORE
达到了设置的某些限制)

另见。如果您可以将错误复制到某个进程1234中,请在该进程仍处于活动状态时查看
/proc/1234/maps

dlopen()句柄后面有什么描述吗

它是一些(仅与
dlopen
dlsym
dlclose
和…一起使用),因此便携程序不需要在意。当然,您可以研究
dlopen
的实现,例如在的源代码内部。另请参见您的系统的
/usr/include/link.h
及其
结构链接映射
(感谢评论)

可能会失败,在这种情况下会给出
NULL
。您应该始终针对此类故障进行测试(请参阅)。我猜在您的案例中,一些
dlopen
失败了,但您忘记了测试它(这可以解释
gdb
dlsym
中报告的
this=0
)。但是,在Linux上,您可以成功地执行成千上万的
dlopen
-s,请参见我的示例。当然,您不应该将其与
NULL
共享对象句柄一起使用(否则,它将与可能的句柄一起使用)

要查找,特别是在Linux上,给定它可能属于哪个函数的某个地址,您可以使用

请注意,文件知道
mmap
-ed内存段(除非它们可能不完整,因为您使用
RLIMIT_CORE
达到了设置的某些限制)

另见。如果您可以将错误复制到某个进程1234中,请在该进程仍处于活动状态时查看
/proc/1234/maps

dlopen()句柄后面有什么描述吗


它是一些(仅与
dlopen
dlsym
dlclose
和…一起使用),因此便携程序不需要在意。当然,您可以研究
dlopen
的实现,例如在的源代码内部。另请参见您的系统的
/usr/include/link.h
及其
结构链接映射
(感谢评论)

Dlopen
如果未能找到或加载库(在这种情况下,您无需调试其他内容),则返回
NULL
或者指向公共Glibc头
link.h
中定义的
link\u映射
数据结构的指针(例如,请参见)。

Dlopen
如果无法定位或加载库,则返回
NULL
(在这种情况下,您无需调试其他内容)或者指向在公共Glibc头
link.h
中定义的
link\u映射
数据结构的指针(参见示例)。

显示一些。好的,
core
文件包含了一些关于
dlopen
的跟踪信息-它知道哪些文件被
mmap
-ed-
这个=0x0
通常意味着静态对象尚未初始化。在不了解更多代码的情况下,很难说这是否是问题所在。另请看。展示一些。好的,
core
文件包含了一些关于
dlopen
的跟踪信息-它知道哪些文件被
mmap
-ed-
这个=0x0
通常意味着静态对象尚未初始化。在不了解更多代码的情况下,很难说这是否是问题所在。另见。