You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Chroot环境下跨libc调用libvulkan.so的高效方案问询

场景说明

以下是具体场景:

  • 已在获取root权限且禁用SELinux的Android chroot环境中操作
  • chroot内有一个链接glibc的程序,因无源码无法重新链接
  • 该程序需要加载并调用/system/lib64/libvulkan.so(Vulkan Loader)的导出函数,而此库链接的是Android的Bionic libc
  • 同一进程内存无法同时加载两个libc,尝试后触发SIGTRAP信号

如何高效实现该调用(避免Vulkan额外开销)?

我的可行方案构想

方案一

  • 构建一个Vulkan"服务端"程序,加载libvulkan.so,开启IPC共享内存,将封装后的Vulkan函数指针写入共享内存
  • 构建一个伪libvulkan.so作为Vulkan"客户端"供目标程序加载,伪库导出与真实库相同的内容,将调用重定向到共享内存中的函数指针

注:无法通过共享内存导出函数指针

方案二

  • 与方案一类似,但不通过共享内存导出函数指针:
  • 伪libvulkan.so(客户端)将API名称(或ID等)、函数参数等写入共享内存
  • Vulkan"服务端"程序通过循环监听共享内存中的调用请求,将请求重定向到真实libvulkan.so

注:对于涉及内存地址的API,Vulkan无法访问目标程序的内存

方案三

与方案二类似,但针对涉及内存地址的参数,在Vulkan"服务端"分配临时缓冲区传递给真实Vulkan API,再将缓冲区返回给伪libvulkan.so(客户端)

注:理论可行,但效率较低

又陷入依赖困境了 :(

内容的提问来源于stack exchange,提问作者raspiduino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:37:15