【问题标题】:How to sanitize the shared library in AOSP如何清理 AOSP 中的共享库
【发布时间】:2020-07-15 08:41:35
【问题描述】:

我的 HAL 是一个共享库。我想单独为共享库进行地址清理。我在将 HAL 构建为共享库的文件 (Android.mk) 中添加了以下行。

  1. LOCAL_SANITIZE:=地址
  2. 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:=地址 LOCAL_MODULE_RELATIVE_PATH := asan 然后可执行文件下的可执行文件和共享库也放入/system/lib/asan而不是/system/lib。但是在启动时,启动库将搜索 /system/lib 中的二进制文件,它不会找到并且也不会启动。

安卓版本----奥利奥8.1.0_r33

如果有人有适当的步骤/文档来清理共享库,请帮助我。

【问题讨论】:

    标签: address-sanitizer


    【解决方案1】:

    我按照以下链接构建本机库和二进制文件以进行地址清理,它对我来说很好。

    https://source.android.com/devices/tech/debug/asan#sanitizing_individual_executables_with_asan

    步骤:

    1. 做 repo 同步
    2. 进行干净的构建
    3. 构建准备就绪后,在 Android 生成文件中进行所需的更改 本机库以及二进制文件。
    4. 在不删除任何旧中间体的情况下再次进行构建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-22
      • 1970-01-01
      • 2020-05-02
      • 2012-10-11
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多