关于android:使用内存安全工具提升应用质量和安全性

7次阅读

共计 2321 个字符,预计需要花费 6 分钟才能阅读完成。

Android 内存平安工具是一个可帮忙您晋升利用品质和安全性的综合工具包。通过本文您能够理解到咱们推出的各种内存平安工具及其应用场景,以及理解如何通过这些工具来找到并修复问题。

如果您更喜爱通过视频理解此内容,请在此处查看:

https://www.bilibili.com/vide…

△ 应用内存平安工具晋升利用品质和安全性

什么是内存平安谬误

内存谬误是指在应用 C 或 C++ 等原生语言解决内存时产生的谬误。

void BufferOverflow() {char *p = new char[10];
    p[20] = 'x'; // 💣💥 在调配的数组之外写入
}

void UseAfterFree() {char *p = new char[10];
    delete[] p;
    p[0] = 'x'; // 💣💥 在数组曾经被开释之后写入
}

△ 两种常见的内存平安谬误

在这个例子中,咱们能够看到最常见的两种谬误模式,别离是 Buffer Overflow (缓冲区溢出) 和 Use After Free (开释后应用)。

终端用户设施每秒会报告超过 3,000 次与内存相干的解体,也就是说每个月会产生 77 亿次解体,并且这些解体很容易被用户感知,导致用户对这些利用产生蹩脚的印象。应用内存平安工具可帮忙您缩小此类谬误,从而改良用户体验。

每年有超过 60% 的 Android 破绽是由内存谬误造成的,除了 Android 之外的其余大型原生代码库也报告了相似的问题,修复利用中的内存谬误与修复零碎中的内存谬误一样重要。用户不用关怀操作系统如何爱护其数据,而您的利用则不应漠视这个问题,应用内存平安工具有助于为用户提供更高的平安保障。

Play 商店中超过 50% 的利用蕴含有原生代码,即使您没有间接应用原生代码来实现利用中的性能,也可能会因为应用第三方 SDK 或库而间接蕴含原生代码。

应用内存平安工具

咱们的工作是帮忙开发者确保内存平安,帮忙您防止在应用原生代码解决内存时造成谬误和破绽。因而,咱们开发了一套工具以便检测并帮忙开发者进步工作效率,这使得检测和修复此类谬误变得比以往更轻松。

多年来,咱们致力于引入新工具并加强现有工具,当初正式向您介绍这三款工具:

  • HWASan: 基于编译器的内存谬误检测工具
  • GWP-ASan: 基于分配器的概率性内存谬误检测工具
  • Arm MTE: 基于硬件的内存谬误检测工具

HWASan

HWASan 从 Android 10 开始提供,它能够检测各类内存谬误包含堆栈、全局和堆问题。应用该工具须要从新编译,因为它须要在所有内存操作中引入额定的代码来运行,所以该工具可能不适宜在生产环境中部署。引入 HWASan 大概会使利用的性能升高两倍,咱们建议您在开发和测试阶段中应用 HWASan。

应用 HWASan 总共有 3 个步骤:

  • 将 HWASan 刷写到您的测试设施上
  • 应用 -fsanitize=hwaddress 参数从新构建您的利用
  • 运行

咱们为大多数 Pixel 设施保护 HWASan 构建,尽管该工具的性能不适宜在生产环境中部署,但用于测试是足够的。在外部咱们应用 HWASan 构建来对新的 Pixel 设施进行 dogfood 测试。如果您想理解更多对于 HWASan 的详细信息,请查阅文档指南 HWAddress Sanitizer。

GWP-ASan

GWP-ASan 是咱们在 Android 11 中引入的一款概率性内存谬误检测工具,概率性是指随机爱护某些堆调配,这样能在性能和捕捉谬误的几率之间获得均衡。这有点像彩票零碎,随着运行代码库的设施数量减少,检测到谬误的几率也会减少。GWP-ASan 不须要从新编译,其性能非常适合用于生产环境,强烈建议您从开发初期始终到测试和部署到生产环境的各个阶段都应用 GWP-ASan。

GWP-ASan 的应用非常简单:

  • 将 gwpAsanMode 增加到 Android 清单文件
  • 运行

如果您想理解更多对于 GWP-ASan 的详细信息,请查阅文档指南 GWP-ASan。

Arm MTE

Arm MTE 是咱们与 Arm 合作开发的基于硬件的内存谬误检测工具,咱们将随着新硬件的推出在将来逐渐为开发者提供这款工具。尽管这类硬件技术在一些 Android 设施上可用,但咱们强烈建议利用开发者们去相熟 HWASan 与 GWP-ASan 以便在各类兼容的设施间更为顺畅的过渡。

运行代码并查找问题

启用内存平安工具后应尽可能多地执行代码门路,内存谬误会生成可用于本地调试的 Logcat 和 Tombstone 跟踪记录,在生产环境中,报告将从设施导出到 Play 开发者控制台。咱们在 Android 12 中引入了新的 Tombostone API 使开发者能在利用下次启动时提取到更多的解体信息。咱们始终在与 Firebase 单干,致力于在 Crashlytics 中提供对内存平安工具的反对。

修复问题

△ 内存平安工具提供了蕴含调配和勾销调配回溯的错误报告

应用内存平安工具时,谬误报告会蕴含有助于调试的更多信息,除了令人不欢快的回溯之外,还蕴含了调配和勾销调配的回溯,这对找到谬误的根本原因很有帮忙。咱们在外部开发 Android 操作系统时始终在应用这些工具,这帮忙咱们检测到了在代码库中暗藏了多年的大量谬误,这些工具极大地提高了咱们检测谬误的能力,而且加强的错误报告帮忙咱们缩短了修复工夫。

总结

Android 内存平安工具能够检测代码库中的内存谬误,修复此类谬误可帮忙提高质量和安全性。确保内存平安的窍门是应用内存平安工具运行代码找到谬误,而后修复这些谬误。

感谢您浏览本文章,期待您应用咱们所提供的工具晋升 Android 生态系统的品质和安全性,如果您遇到任何问题或有任何反馈,请通过 Github Issues 与咱们取得联系。

欢迎您 点击这里 向咱们提交反馈,或分享您喜爱的内容、发现的问题。您的反馈对咱们十分重要,感谢您的反对!

正文完
 0