使用AddressSanitizer檢測(cè)內(nèi)存錯(cuò)誤

自己的Android 反外掛SDK絮宁,主要還是cpp代碼,對(duì)自己的代碼還是不太放心脱茉,還是找個(gè)工具測(cè)試測(cè)試

環(huán)境

windows 10 + Android Studio 4.0 + ndk r18b + MIX3 API28 root / Pixel2 API27 root

配置

1.模塊的 build.gradle 中配置自己CMake參數(shù)

cmake{

arguments "-DANDROID_ARM_MODE=arm", "-DANDROID_STL=c++_shared", "-DANDROID_TOOLCHAIN=clang"

????ndk {

????????????abiFilters "armeabi-v7a"

????}

}

2.在AndroidManifest.xml中application標(biāo)簽添加android:debuggable="true"屬性(似乎沒(méi)啥用哈)

3.把ndk目錄下的asan動(dòng)態(tài)庫(kù)拷貝到工程中

動(dòng)態(tài)庫(kù)位置在? ${NDK_PATH}\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang\7.0.2\lib\linux

動(dòng)態(tài)庫(kù)名大概是??libclang_rt.asan-*-android.so非驮,比如我這里是armeabi-v7a,文件名就是? libclang_rt.asan-arm-android.so

把相應(yīng)的庫(kù)文件放在jniLibs相應(yīng)的目錄下

工程目錄

4.添加封裝的shell腳本

如上圖所示担扑,創(chuàng)建一個(gè)resources/lib/[armeabi-v7a]目錄恰响,并創(chuàng)建一個(gè)wrap.sh文件,文件內(nèi)容如下涌献,可參考官網(wǎng)

#!/system/bin/sh

HERE="$(cd "$(dirname "$0")" && pwd)"

export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1,fast_unwind_on_fatal=1

ASAN_LIB=$(ls $HERE/libclang_rt.asan-*-android.so)

if [ -f "$HERE/libc++_shared.so" ]; then

????export LD_PRELOAD="$ASAN_LIB $HERE/libc++_shared.so"

else

????export LD_PRELOAD="$ASAN_LIB"

fi

"$@"

tips:我在官網(wǎng)的基礎(chǔ)上多添加了一個(gè)fast_unwind_on_fatal=1選項(xiàng)(第三行末尾)胚宦,可參考issue

!Q嗬枢劝!注意!2泛尽您旁!:上面這個(gè)腳本每一行的換行符都需要從CRLF換成LF,不然運(yùn)行時(shí)會(huì)報(bào)錯(cuò)說(shuō) No such file or directory轴捎,可參考issue鹤盒,和網(wǎng)友提供解決方案,不過(guò)我用網(wǎng)友提供的決解方案后侦副,發(fā)現(xiàn)還是報(bào)錯(cuò)(具體原因是在進(jìn)行字符替換的時(shí)候?qū)⑽夷_本第一個(gè)字符'#'給刪除了)侦锯。最后我是通過(guò)010Editor把腳本的0xD 0xA全部替換成0xA

粗暴。jpg

在apk被安裝后秦驯,這個(gè)wrap.sh會(huì)放在/data/app/<pkg-name>/lib/[arm]目錄下率触,為了確保正確,可以手動(dòng)執(zhí)行一下腳本,不報(bào)錯(cuò)就ok

5.在CMakeLists.txt中設(shè)置各種標(biāo)志

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")

set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")

set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -fsanitize=address")


6.編譯-安裝-運(yùn)行

如果有崩潰葱蝗,logcat過(guò)濾AddressSanitizer參看詳細(xì)信息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末穴张,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子两曼,更是在濱河造成了極大的恐慌皂甘,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悼凑,死亡現(xiàn)場(chǎng)離奇詭異偿枕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)户辫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)渐夸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人渔欢,你說(shuō)我怎么就攤上這事墓塌。” “怎么了奥额?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵苫幢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我垫挨,道長(zhǎng)韩肝,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任九榔,我火速辦了婚禮哀峻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哲泊。我一直安慰自己剩蟀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布攻旦。 她就那樣靜靜地躺著喻旷,像睡著了一般生逸。 火紅的嫁衣襯著肌膚如雪牢屋。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天槽袄,我揣著相機(jī)與錄音烙无,去河邊找鬼。 笑死遍尺,一個(gè)胖子當(dāng)著我的面吹牛截酷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乾戏,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼迂苛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼三热!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起三幻,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤就漾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后念搬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體抑堡,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年朗徊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了首妖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爷恳,死狀恐怖有缆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舌仍,我是刑警寧澤妒貌,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站铸豁,受9級(jí)特大地震影響灌曙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜节芥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一在刺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧头镊,春花似錦蚣驼、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至坛芽,卻和暖如春留储,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咙轩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工获讳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人活喊。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓丐膝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帅矗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355