将 null 传递给 dlclose()

问题描述

将 null (0,NULL,nullptr,..) 传递给 dlclose() 是否安全?

我在 manual 中找不到与此相关的任何信息。

解决方法

如果没有记录,很可能没有(或“最好”未定义)。 实际上,一个简单的测试可以验证您的平台:

编译这个

#include <dlfcn.h>
int main()
{
   dlclose(0);
}

已经产生以下编译器警告 (gcc):

test.c: In function ‘main’:
test.c:5:2: warning: null argument where non-null required (argument 1) [-Wnonnull]
    5 |  dlclose(0);
      |  ^~~~~~~
/usr/bin/ld: /tmp/ccYF9oqz.o: in function `main':

运行它,由于分段错误而按预期崩溃。

你为什么想要或需要首先知道这一点是个问题。 在调用 dlclose 或提供之前进行空检查应该是微不足道的 一个包装器,如果不方便的话。

,

安全。

查看glibc的实现,传递给这个函数的句柄是一个指向struct link_map实例的指针。然后在没有空检查的情况下取消引用该指针。

因此您需要在调用 dlclose 之前检查 NULL。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...