日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux下内存检测工具:asan

發布時間:2023/12/3 linux 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux下内存检测工具:asan 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux下內存檢測工具:asan

? ? ? ? ? ?ASAN(Address-Sanitizier)早先是LLVM中的特性,后被加入GCC 4.8,在GCC 4.9后加入對ARM平臺的支持。因此GCC 4.8以上版本使用ASAN時不需要安裝第三方庫,通過在編譯時指定編譯CFLAGS即可打開開關。

目錄

Linux下內存檢測工具:asan

1、編譯選項

1.1 Gcc編譯選項

1.2 Ld鏈接選項

2、ASAN運行選項

2.1 ASAN_OPTIONS設置

2.2 LSAN_OPTIONS設置

3、總結


1、編譯選項

1.1 Gcc編譯選項

# -fsanitize=address:開啟內存越界檢測

# -fsanitize-recover=address:一般后臺程序為保證穩定性,不能遇到錯誤就簡單退出,而是繼續運行,采用該選項支持內存出錯之后程序繼續運行,需要疊加設置ASAN_OPTIONS=halt_on_error=0才會生效;若未設置此選項,則內存出錯即報錯退出

ASAN_CFLAGS +=?-fsanitize=address -fsanitize-recover=address

# -fno-stack-protector:去使能棧溢出保護

# -fno-omit-frame-pointer:去使能棧溢出保護

# -fno-var-tracking:默認選項為-fvar-tracking,會導致運行非常慢

# -g1:表示最小調試信息,通常debug版本用-g即-g2

ASAN_CFLAGS += -fno-stack-protector -fno-omit-frame-pointer -fno-var-tracking -g1

1.2 Ld鏈接選項

ASAN_LDFLAGS += -fsanitize=address -g2

如果使用gcc鏈接,此處可忽略。

2、ASAN運行選項

2.1 ASAN_OPTIONS設置

ASAN_OPTIONS是Address-Sanitizier的運行選項環境變量。

# halt_on_error=0:檢測內存錯誤后繼續運行

# detect_leaks=1:使能內存泄露檢測

# malloc_context_size=30:內存錯誤發生時,顯示的調用棧層數為30

# log_path=/root/asan.log:內存檢查問題日志存放文件路徑

# suppressions=$EXCLUDED_FILE:屏蔽打印某些內存錯誤

export ASAN_OPTIONS=halt_on_error=0:use_sigaltstack=0:detect_leaks=1:malloc_context_size=15:log_path=/root/asan.log:suppressions=$EXCLUDED_FILE

除了上述常用選項,以下還有一些選項可根據實際需要添加:

# detect_stack_use_after_return=1:檢查訪問指向已被釋放的棧空間

# handle_segv=1:處理段錯誤;也可以添加handle_sigill=1處理SIGILL信號

# quarantine_size=10240000:內存cache可緩存free內存大小10M

ASAN_OPTIONS=${ASAN_OPTIONS}:verbosity=0:handle_segv=1:allow_user_segv_handler=1:detect_stack_use_after_return=1:fast_unwind_on_fatal=1:fast_unwind_on_check=1:fast_unwind_on_malloc=1:quarantine_size=10240000

2.2 LSAN_OPTIONS設置

LSAN_OPTIONS是LeakSanitizier運行選項的環境變量,而LeakSanitizier是ASAN的內存泄漏檢測模塊,常用運行選項有:

# exitcode=0:設置內存泄露退出碼為0,默認情況內存泄露退出碼0x16

# use_unaligned=4:4字節對齊

export LSAN_OPTIONS=exitcode=0:use_unaligned=4

3、總結

實際開發環境中,可能存在gcc版本低,使用asan做內存檢查時,需要鏈接libasan.so庫的情況,可以使用yumdownloader --resolve --destdir=. libasan 下載對應gcc版本rpm安裝包。

其次,平臺軟件通常都會內部實現一套內存操作接口,為使用asan工具,需要替換成glibc提供的接口。此時,可以通過LD_PRELOAD環境變量解決這類問題。

export LD_PRELOAD= libasan.so.2:libprelib.so???#vos_malloc --> malloc

PS:
1、安裝LLVM 3.1以上版本

2、編譯參數附加

-fsanitize=address

3、設置環境變量參數

export ASAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-symbolizer

export?ASAN_OPTIONS=symbolize=1

4、運行程序,如果出錯,addressSanitizer會給出詳細的報告。

?

總結

以上是生活随笔為你收集整理的Linux下内存检测工具:asan的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。