編譯器如何危及應用程序的安全
對于編譯器如何將人類可讀的代碼翻譯成機器運行的機器碼,大多數程序員通常只有大概的概念。在編譯過程中,編譯器會對代碼進行優化,使其能高效的運行。有的時候,編譯器在優化上面走的太遠了,它甚至移除了本不應該移除的代碼,導致應用程序更加脆弱。MIT 人工智能和計算機科學實驗室的四位研究人員調查了(PDF)不穩定優化(optimization-unstable)代碼的問題——編譯器移除的包含未定義行為的代碼。所謂的未定義行為包括了除以0,空指針間接引用和緩沖溢出等。
在某些情況下,編譯器完整移除未定義行為代碼可能會導致程序出現安全弱點。研究人員開發了一個靜態檢查器 STACK 去識別不穩定的C/C++代碼,他們在測試的系統中發現上百個新 bug:Linux 內核發現 32 個 bug,Mozilla 發現 3 個,Postgres 9 個和 Python 5 個。STACK 掃描了 Debian Wheezy 軟件包倉庫 8575 個含有C/C++代碼的軟件包,發現其中 3471 個至少包含一個不穩定的代碼。研究人員認為這是一個非常普遍的問題。
來自: Solidot
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!