linux动态库preload函数,如何使用LD_PRELOAD检查是否已预加载Linux共享库

我熟悉使用dlopen()检查共享库是否已经使用先前调用dlopen()加载到进程中,如果不存在则不会触发加载,如下所示:

void* lib = dlopen(lib_name, RTLD_NOLOAD);

if (lib != NULL) {

...

}

我最近尝试应用相同的模式来确定是否已使用LD_PRELOAD将少数共享库中的一个加载到进程空间中.但是在所有情况下,上面提到的对dlopen()的调用都返回NULL.

所以基本上,如果我使用这个命令行启动进程

LD_PRELOAD=libawesome.so ./mycoolprocess

然后在mycoolprocess.c中的代码中运行以下检查

void* has_awesome = dlopen("libawesome.so", RTLD_NOLOAD);

if (has_awesome != NULL) {

printf("libawesome is available\n");

}

无论是否使用LD_PRELOAD加载共享库,对dlopen()的调用始终返回NULL.根据Andrew Henle在下面的评论,我也尝试使用其中一个重新加载的共享对象的绝对路径调用dlopen,但是在这种情况下dlopen仍会返回NULL,尽管共享对象是预加载的.

所以我的问题是双重的:

>上述模式是否适用于使用LD_PRELOAD加载的库?

>是否有另一种方法让进程确定是否已预加载特定的共享库?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值