android - AddressSanitizer(或任何其他工具)可以在不需要编译的情况下检测 Android 本机代码二进制文件中的内存错误吗?
问题描述
谷歌AddressSanitizer
检测 Android 本机代码中的内存错误。 但是,它确实需要使用它需要的任何标志和设置重新编译目标二进制文件(即可执行文件或库):
AddressSanitizer (ASan) 是一种基于编译器的快速工具,用于检测本机代码中的内存错误。
是否有无需重新编译目标二进制文件即可检测 Android 内存错误的工具?以下是对此类工具外观的一些想法:
- 该工具应该拦截/挂钩相关的内存相关函数
libc.so
(例如,malloc、free、calloc、realloc),类似于Frida拦截任何本机代码函数的能力。 - 该工具应该通过将其注入进程空间来工作。从那时起,一切都应该“正常工作”。
- 它还应该拦截硬件故障和软件异常(例如,分段故障)以检测内存错误。
- 可以合理地假设该工具不如基于编译器的 AddressSanitizer 强大,但这是意料之中的。
解决方案
https://github.com/frida/frida-gum
需要高度粒度的开发人员的帮助库:
堆分配跟踪和泄漏检查。
https://github.com/frida/frida-gum/tree/master/libs/gum/heap
使用最坏情况检查器回调进行分析。
https://github.com/frida/frida-gum/blob/7e4c5b547b035ae05d2f9e160652101bf741e6c3/libs/gum/prof/gumprofiler.h#L40-L42 https://github.com/frida/frida-gum/tree/master/libs /口香糖/教授
推荐阅读
- php - 在 PHP 中,为什么当我将 var 作为字符串转换为浮点数时,我会失去精度?
- python - 需要帮助确定用户是否使用 Python 回答“是”或“否”
- ruby - 使用 Ruby File.open 写入具有长文件名的外部文件
- javascript - 如何使用 React Hook useEffect 检查状态默认布尔值 false 是否更改为 true
- java - 寻求帮助 在 1.14 Minecraft 中设置粒子
- google-cloud-platform - GCP Compute Engine 实例除了 22 (SSH) 之外的所有端口连接都被拒绝
- php - WooCommerce 订阅取消电子邮件给客户
- python-2.7 - 如何解析混合顺序的多个参数
- rust - 检查 Option 是否包含特定 Some 值的最佳方法?
- java - 生成用于在 Java 中访问 CR 的身份验证令牌