android so库函数,Android 加载so的函数调用

如果一个so没有加载,系统首先会调用dlopen函数处理库文件。以下源码来自android6.0.1static void* dlopen_ext(const char* filename, int flags, const android_dlextinfo* extinfo) {ScopedPthreadMutexLocker locker(&g_dl_mutex);soinfo* r...
摘要由CSDN通过智能技术生成

如果一个so没有加载,系统首先会调用dlopen函数处理库文件。以下源码来自android6.0.1

static void* dlopen_ext(const char* filename, int flags, const android_dlextinfo* extinfo) {

ScopedPthreadMutexLocker locker(&g_dl_mutex);

soinfo* result = do_dlopen(filename, flags, extinfo);

if (result == nullptr) {

__bionic_format_dlerror("dlopen failed", linker_get_error_buffer());

return nullptr;

}

return result;

}

void* dlopen(const char* filename, int flags) {

return dlopen_ext(filename, flags, nullptr);

}

dlopen_ext函数会继续调用do_dlopen函数

if ((flags & ~(RTLD_NOW|RTLD_LAZY|RTLD_LOCAL|RTLD_GLOBAL|RTLD_NODELETE|RTLD_NOLOAD)) != 0) {

DL_ERR("invalid flags to dlopen: %x", flags);

return nullptr;

}

if (extinfo != nullptr) {

if ((extinfo->flags & ~(ANDROID_DLEXT_VALID_FLAG_BITS)) != 0) {

DL_ERR("invalid extended flags to android_dlopen_ext: 0x%" PRIx64, extinfo->flags);

return nullptr;

}

if ((extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD) == 0 &&

(extinfo->flags & ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET) != 0) {

DL_ERR("invalid extended flag combination (ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET without "

"ANDROID_DLEXT_USE_LIBRARY_FD): 0x%" PRIx64, extinfo->flags);

return nullptr;

}

}

ProtectedDataGuard guard;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值