當前位置:編程學習大全網 - 源碼下載 - Android malloc_debug介紹

Android malloc_debug介紹

android 的libc中有malloc_debug的hook調用,我們可以使用malloc_debug中的hook函數對內存分配進行跟蹤加測。

malloc_debug主要包含的功能如下:

2) 支持內存邊界,可以在申請的內存頭部和尾部添加guard,內存越界檢查,use after free,內存崩潰檢查等。

3) 調用棧跟蹤和打印,跟蹤內存分配的同時保存內存分配的調用棧,方便內存泄漏檢查。

1) 開啟malloc_debug

adb shell setprop libc.debug.malloc.program

libc在初始化時會調用MallocInitImpl判斷屬性來加載debug so,調用InitMallocFunctions替換掉Libc原生的內存分配和釋放函數。

除了內存分配和釋放,常見如下:

比如在完成註冊後,調用FinishInstallHooks,initialize,將finalize註冊到process退出時。

1) 內存邊界檢查

front_guard[=SIZE_BYTES]Enables a small buffer placed before the allocated data.

rear_guard[=SIZE_BYTES] Enables a small buffer placed after the allocated data.

guard[=SIZE_BYTES] Enables both a front guard and a rear guard on all allocations.

主要原理是在分配內存的頭部和尾部添加壹段數據,作為邊界,頭部初始化為0xaa,尾部初始化為0xbb。

2)調用棧功能

backtrace[=MAX_FRAMES]

backtrace_enable_on_signal[=MAX_FRAMES]

backtrace_dump_on_exit

backtrace_dump_prefix

backtrace_full

設置保存的調用棧個數,在信號量或者退出時打印調用棧

3) malloc內存默認值

fill_on_alloc[=MAX_FILLED_BYTES] size will be set to 0xeb.

fill_on_free[=MAX_FILLED_BYTES] When an allocation is freed, fill it with 0xef.

fill[=MAX_FILLED_BYTES] This enables both the fill_on_alloc option and the fill_on_free option.

expand_alloc[=EXPAND_BYTES] Add an extra amount to allocate for every allocation.

1) 內存泄漏檢測

在shell命令下執行 #setprop libc.debug.malloc.options "backtrace leak_track verbose"

這樣開啟後在進程退出時會打印leak信息,在發送kill -47時會打印當前內存申請

2) 內存崩潰檢查

在shell命令中添加guard #setprop libc.debug.malloc.options "backtrace leak_track verbose guard"

這樣會檢測內存覆蓋等檢測

3) verify_pointers 開啟可以檢測use after free和double free等操作

  • 上一篇:第壹次去配眼鏡,不知道流程,請詳細說明壹下!急急!
  • 下一篇:jetty的 continuations 有什麽優點
  • copyright 2024編程學習大全網