address-sanitizer - 如何清理 AOSP 中的共享库
问题描述
我的 HAL 是一个共享库。我想单独为共享库进行地址清理。我在将 HAL 构建为共享库的文件 (Android.mk) 中添加了以下行。
- LOCAL_SANITIZE:=地址
- LOCAL_MODULE_RELATIVE_PATH := asan
然后我得到一个错误,比如“ (SHARED_LIBRARIES android-x86_64) missing libasan.vendor (STATIC_LIBRARIES android-x86_64) ”。所以我在所有依赖的静态库中添加了 sanitize 标志。其中一个库有 Android.bp 文件而不是 Android.mk,所以我添加了 sanitize: {address: true},然后它通过错误(模块“libaudiohw_legacy”变体“android_x86_64_silvermont_static_core”:取决于禁用的模块“libasan”)
根据文档(https://source.android.com/devices/tech/debug/asan),我读到,由于 ASan 的工作方式,使用 ASan 构建的库只能由使用 ASan 构建的可执行文件使用. 因此,我通过添加以下两行将可执行文件设置为 asan。删除了所有其他更改。 LOCAL_SANITIZE:=address LOCAL_MODULE_RELATIVE_PATH := asan 然后可执行文件和可执行文件下的共享库也放入 /system/lib/asan 而不是 /system/lib。但是在启动时,启动库将搜索 /system/lib 中的二进制文件,它不会找到并且也不会启动。
安卓版本----奥利奥8.1.0_r33
如果有人有适当的步骤/文档来清理共享库,请帮助我。
解决方案
我按照以下链接构建本机库和二进制文件以进行地址清理,它对我来说很好用。
https://source.android.com/devices/tech/debug/asan#sanitizing_individual_executables_with_asan
脚步:
- 做回购同步
- 给一个干净的构建
- 构建准备好后,在 Android 中为本地库和二进制文件生成所需的更改。
- 在不删除任何旧中间体的情况下再次进行构建。
推荐阅读
- sql-server - 作业正常工作但 tempdb 未修改
- javascript - 如何将值从模板传递到 ts 函数
- python - Flask-mail 正在尝试使用 localhost 作为邮件服务器,而不是配置的 SMTP 服务器
- python - 如何从 sklearn 为多列反转标签编码器?
- java - 如何从 Sql 中插入和获取数据
- android - 用文字描边
- android - Mapbox IllegalStateException:在加载/已加载较新样式时调用 getSourceAs
- youtube-api - 使用 oembed 检索数据时,Youtube 发送错误的缩略图
- node.js - API 请求/响应形状的单一事实来源,包括 JSON 模式、TypeScript 类型和运行时验证器?
- cloud - Azure 扩展.json