ניפוי באגים של שימוש בזיכרון מקומי

כלי לניקוי כתובות: HWASan/ASan

מפתחי פלטפורמת Android משתמשים ב-HWAddressSanitizer (HWASan) כדי למצוא באגים בזיכרון ב-C/C++.

אפשר להטמיע קובצי אימג' של HWASan שנוצרו מראש במכשירי Pixel נתמכים מ-ci.android.com (הוראות מפורטות להגדרה).

החל מגרסה Android 8.0 (Oreo), אפשר גם להשתמש ב-ASAN כדי לנפות באגים באפליקציות במכשירי ייצור שלא עברו תהליך רוט. ההוראות מפורטות בוויקי של ASan.

Heapprofd

Android 10 תומך ב-heapprofd, כלי לניתוח אשכולות (heap) באמצעות דגימה עם תקורה נמוכה. heapprofd מאפשר לשייך את השימוש בזיכרון מקומי למחסומי קריאות בתוכנית. מידע נוסף זמין במאמר heapprofd – Android Heap Profiler באתר התיעוד של Perfetto.

ניפוי באגים בשיטת Malloc

במאמרים ניפוי באגים ב-Malloc ומעקב אחר זיכרון נייטיב באמצעות קריאות חזרה (callbacks) של libc מפורט תיאור מלא של אפשרויות ניפוי הבאגים שזמינות לבעיות בזיכרון נייטיב.

libmemunreachable

libmemunreachable של Android הוא גלאי דליפות זיכרון נייטיב ללא תקורה. הוא משתמש במעבר לא מדויק של אשפה עם סימון וסריקה בכל הזיכרון המקומי, ומדווח על כל בלוק שלא ניתן לגשת אליו כדליפה. הוראות השימוש מפורטות במסמכי העזרה של libmemunreachable.

קטעי הוק של Malloc

אם אתם רוצים ליצור כלים משלכם, libc של Android תומכת גם בחסימת כל הקריאות להקצאה/שחרור שמתרחשות במהלך ביצוע התוכנית. הוראות השימוש מפורטות במסמכי התיעוד של malloc_hooks.

נתונים סטטיסטיים של Malloc

ב-Android יש תמיכה בתוספים mallinfo(3) ו-malloc_info(3) ל-<malloc.h>. הפונקציה malloc_info זמינה ב-Android 6.0 (Marshmallow) ואילך, וסכימת ה-XML שלה מתועדת ב-<malloc.h> של Bionic.

Dalvik Debug Monitor Server

אפשר גם להשתמש ב-Dalvik Debug Monitor Server‏ (DDMS) כדי לקבל תצוגה גרפית של הפלט של Malloc Debug.

כדי להשתמש ב-DDMS, צריך קודם להפעיל את ממשק המשתמש המקורי של הזיכרון:

  1. פתיחת ~/.android/ddms.cfg
  2. מוסיפים את השורה: native=true

אחרי שמפעילים מחדש את DDMS ובוחרים תהליך, אפשר לעבור לכרטיסייה החדשה של הקצאה מקורית וליישב אותה עם רשימת הקצאות. האפשרות הזו שימושית במיוחד לניפוי באגים של דליפות זיכרון.