Red de conocimiento informático - Computadora portátil - Introducción a Android malloc_debug

Introducción a Android malloc_debug

Hay una llamada de enlace a malloc_debug en la libc de Android. Podemos usar la función de enlace en malloc_debug para realizar un seguimiento de la asignación de memoria.

malloc_debug incluye principalmente las siguientes funciones:

2) Admite límites de memoria, que pueden agregar protección, verificación de memoria fuera de límites, uso después del lanzamiento y verificación de fallas de memoria en el La cabeza y la cola de las aplicaciones de memoria esperan.

3) Admite límites de memoria, puede agregar medidas de protección, comprobaciones de memoria fuera de límites, uso después de inactividad, comprobaciones de fallos de memoria, etc. al principio y al final de las aplicaciones de memoria.

3) Seguimiento e impresión de la pila de llamadas, mientras rastrea la asignación de memoria, guarde la pila de llamadas de asignación de memoria para facilitar la detección de pérdidas de memoria.

1) Habilite malloc_debug

adb shell setprop libc.debug.malloc.program

libc llamará a MallocInitImpl durante la inicialización para determinar los atributos para cargar la depuración, por lo que Llamar a InitMallocFunctions reemplaza las funciones nativas de asignación y desasignación de memoria de Libc.

Además de la asignación y liberación de memoria, las situaciones comunes son las siguientes:

Por ejemplo, después de completar el registro, llame a FinishInstallHooks, la inicialización y el registro finalizan para manejar la salida.

1) Comprobación de límites de memoria

front_guard[=SIZE_BYTES] permite colocar pequeños buffers antes de los datos asignados.

guard[=SIZE_BYTES] habilita tanto guardia como guardia en todas las asignaciones.

El principio fundamental es agregar un dato como límite al principio y al final de la memoria asignada. El principio se inicializa en 0xaa y el final se inicializa en 0xbb.

2) Función de pila de llamadas

backtrace[=MAX_FRAMES]

backtrace_enable_on_signal[= MAX_FRAMES]

backtrace_dump_on_exit

backtrace_dump_prefix

backtrace_full

Establece el número de pilas de llamadas guardadas e imprime la pila de llamadas en semáforo o al salir

3) valor predeterminado de memoria malloc

fill_on_alloc[=MAX_FILLED_BYTES] el tamaño se establecerá en 0xeb.

fill_on_free[=MAX_FILLED_BYTES] Rellenar con 0xef cuando se libere la asignación.

fill[=MAX_FILLED_BYTES] Esto habilita la opción fill_on_alloc y la opción fill_on_free.

expand_alloc[=EXPAND_BYTES] agrega un número de asignación adicional a cada asignación.

1) Detección de pérdida de memoria

Ejecute #setprop libc.debug.malloc en el comando shell. Opción "backtrace lean_track verbose"

Cuando está activada, la información de la fuga se imprimirá cuando salga el proceso y la solicitud de memoria actual se imprimirá cuando se envíe kill -47

2 ) Comprobación de fallos de memoria

Agregue #setprop guard en el comando de shell libc.debug.malloc.options "backtrace fugas_track detallado"

.

malloc.options "backtrace filter_track verbose guard"

Esto verificará la cobertura de memoria y otras pruebas

3) Active verificar_punteros para verificar el uso después de las operaciones gratuitas y duplicadas

Active Verify_pointers para detectar el uso después de operaciones gratuitas y dobles gratuitas