天天看點

低版本環境運作高版本生成的ASan程式(轉)

Address Sanitizer(ASan)是一個快速的記憶體錯誤檢測工具。它非常快,隻拖慢程式兩倍左右(比起Valgrind快多了)。它包括一個編譯器instrumentation子產品和一個提供malloc()/free()替代項的運作時庫。

從gcc 4.8開始,AddressSanitizer成為gcc的一部分。當然,要獲得更好的體驗,最好使用4.9及以上版本,因為gcc 4.8的AddressSanitizer還不完善,最大的缺點是沒有符号資訊。

但是,由于經常限于現有測試環境或生産環境的原因,目标程式的ASan版本往往會使用gcc高版本進行編譯生成,但是既有環境又是受限于作業系統的低版本,是以需要将高版本的目标程式移植到低版本環境運作時,往往會啟動失敗,因為缺少相應的庫或系統版本太低。這時需要做一些額外的配置。

将libasan.so.3庫拷貝到目标程式的運作依賴庫路徑,或直接放置到目标程式同路徑下;

如果遇到libstdc++.so庫版本的問題(符号識别問題),也需要更新目标環境的libstdc++.so庫檔案。root下執行ll /lib64/libstdc++.so.6,檢視軟連接配接指向的版本,如果是6.0.22,則忽略以下操作;并記下該版本檔案名稱;cp libstdc++.so.6.0.22到/lib64/目錄下,重新定位軟連接配接:ln –snf /lib64/libstdc++.so.6.0.22 /lib64/libstdc++.so.6

然後啟動目标程式,即可運作成功,這樣既不需要再低版本gcc下重新安裝asan進行編譯,也不需要把目标環境進行逐一更新。

https://www.modb.pro/db/76403

繼續閱讀