精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當前位置:安全企業動態 → 正文

Checked C —— 微軟發布讓C/C++更加安全的庫

責任編輯:editor006 作者:Abel Avram |來源:企業網D1Net  2016-06-22 22:02:45 本文摘自:INFOQ

微軟開源了Checked C,一個旨在對C和C++增加邊界檢查的研究項目。

C和C++語言上最大的漏洞之一可能就是越界的內存訪問。根據美國國家標準技術研究所的國家漏洞數據庫數據,從2010年至2015年,緩沖區溢出占所有安全漏洞的10-16%。由于大部分系統軟件(操作系統、數據庫、編譯器、解釋器、瀏覽器等)都使用C和C++兩種語言之一編寫,許多系統都面臨內存沖突問題,這使得它們面臨故障或者受到攻擊,導致隱私信息泄露和系統被控制。來自微軟和馬里蘭大學的一群研究者正在嘗試解決這些問題,實現了Checked C,它是一個C語言的擴展和C++語言的子集,為這些語言增加邊界檢查。

不像現代語言(如Java、C#)這些自帶自動邊界檢測,將該功能加入到C語言非常困難,項目參與者、微軟研究員David Tarditi解釋道:

為C語言增加邊界檢查有兩個障礙。第一是運行時邊界信息的存放位置,第二是如何高效的進行邊界檢查。在實踐中發現,改變所有C語言指針類型和數組,以攜帶邊界信息不是一個有效的方案。C語言可能被用于系統基礎,一些硬件和標準指定了數據布局,且數據布局無法改變。同時C程序還與現存的操作系統交互,這些軟件都需要特定的數據布局。

Checked C允許程序員在C/C++中編寫“確保邊界檢查”的代碼。為了實現這個功能Checked C增加了新的指針和數組類型,它們可以在編譯期和運行時進行邊界檢查:

ptr:指向類型T且無須邊界檢查的指針。這種類型的指針不允許參與算數運算。當訪問內存時,該類型指針不能為null。大部分指針應該用此類型。 array_ptr:指向包含類型T數組的指針。該指針可以進行算數運算。當讀寫內存時它不能為null。程序員需要檢查這類指針的邊界。 span:包含邊界信息的指針。塔支持算數運算。當進行內存讀寫的時候不能為null。 T array_var checked[100]:聲明類型為T、大小為100的數組并且包含邊界檢查。當進行C語言類型轉換時,包含邊界檢查的數組將被轉換成array_ptr類型。

該規范確定了變量操作行為,包括指針類型的間接尋址、數組引用、賦值、指針加法、比較、取址(&)、含邊界檢查數組類型和指針類型的轉換等。

現存的C程序可以繼續工作,很明顯C*仍然未檢查,且指針的算數運算會破壞當前代碼。但是編譯器可以通過增加參數在指針非正常使用時發出警告或者錯誤。

Checked C在GitHub上開源,包含規范、一個clang的實現和一個LLVM的實現。對此項目感興趣的開發者被邀請參與項目,即可以改進規范、提出新的功能例如類型轉換或者內存管理、增加測試,也可以擴展其他編譯器對Checked C的支持。

過去也有其他嘗試對C語言增加邊界檢查,包括使用靜態分析、增強編譯器或者運行時以避免修改語言本身、程序驗證或者創造基于C的新語言。規范的第九章“相關工作”包含了這些其他實現的細節,并且解釋了為什么作者選擇了擴展語言。

查看英文原文:Checked C - A Safer C/C++ from Microsoft

關鍵字:Checked指針邊界

本文摘自:INFOQ

x Checked C —— 微軟發布讓C/C++更加安全的庫 掃一掃
分享本文到朋友圈
當前位置:安全企業動態 → 正文

Checked C —— 微軟發布讓C/C++更加安全的庫

責任編輯:editor006 作者:Abel Avram |來源:企業網D1Net  2016-06-22 22:02:45 本文摘自:INFOQ

微軟開源了Checked C,一個旨在對C和C++增加邊界檢查的研究項目。

C和C++語言上最大的漏洞之一可能就是越界的內存訪問。根據美國國家標準技術研究所的國家漏洞數據庫數據,從2010年至2015年,緩沖區溢出占所有安全漏洞的10-16%。由于大部分系統軟件(操作系統、數據庫、編譯器、解釋器、瀏覽器等)都使用C和C++兩種語言之一編寫,許多系統都面臨內存沖突問題,這使得它們面臨故障或者受到攻擊,導致隱私信息泄露和系統被控制。來自微軟和馬里蘭大學的一群研究者正在嘗試解決這些問題,實現了Checked C,它是一個C語言的擴展和C++語言的子集,為這些語言增加邊界檢查。

不像現代語言(如Java、C#)這些自帶自動邊界檢測,將該功能加入到C語言非常困難,項目參與者、微軟研究員David Tarditi解釋道:

為C語言增加邊界檢查有兩個障礙。第一是運行時邊界信息的存放位置,第二是如何高效的進行邊界檢查。在實踐中發現,改變所有C語言指針類型和數組,以攜帶邊界信息不是一個有效的方案。C語言可能被用于系統基礎,一些硬件和標準指定了數據布局,且數據布局無法改變。同時C程序還與現存的操作系統交互,這些軟件都需要特定的數據布局。

Checked C允許程序員在C/C++中編寫“確保邊界檢查”的代碼。為了實現這個功能Checked C增加了新的指針和數組類型,它們可以在編譯期和運行時進行邊界檢查:

ptr:指向類型T且無須邊界檢查的指針。這種類型的指針不允許參與算數運算。當訪問內存時,該類型指針不能為null。大部分指針應該用此類型。 array_ptr:指向包含類型T數組的指針。該指針可以進行算數運算。當讀寫內存時它不能為null。程序員需要檢查這類指針的邊界。 span:包含邊界信息的指針。塔支持算數運算。當進行內存讀寫的時候不能為null。 T array_var checked[100]:聲明類型為T、大小為100的數組并且包含邊界檢查。當進行C語言類型轉換時,包含邊界檢查的數組將被轉換成array_ptr類型。

該規范確定了變量操作行為,包括指針類型的間接尋址、數組引用、賦值、指針加法、比較、取址(&)、含邊界檢查數組類型和指針類型的轉換等。

現存的C程序可以繼續工作,很明顯C*仍然未檢查,且指針的算數運算會破壞當前代碼。但是編譯器可以通過增加參數在指針非正常使用時發出警告或者錯誤。

Checked C在GitHub上開源,包含規范、一個clang的實現和一個LLVM的實現。對此項目感興趣的開發者被邀請參與項目,即可以改進規范、提出新的功能例如類型轉換或者內存管理、增加測試,也可以擴展其他編譯器對Checked C的支持。

過去也有其他嘗試對C語言增加邊界檢查,包括使用靜態分析、增強編譯器或者運行時以避免修改語言本身、程序驗證或者創造基于C的新語言。規范的第九章“相關工作”包含了這些其他實現的細節,并且解釋了為什么作者選擇了擴展語言。

查看英文原文:Checked C - A Safer C/C++ from Microsoft

關鍵字:Checked指針邊界

本文摘自:INFOQ

電子周刊
回到頂部

關于我們聯系我們版權聲明隱私條款廣告服務友情鏈接投稿中心招賢納士

企業網版權所有 ©2010-2024 京ICP備09108050號-6 京公網安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 册亨县| 宜良县| 浙江省| 绥化市| 汝阳县| 屏南县| 米脂县| 奉化市| 定南县| 大姚县| 永仁县| 德钦县| 万全县| 阿尔山市| 泽普县| 胶南市| 拉孜县| 临清市| 曲阳县| 武胜县| 衡山县| 珲春市| 彭泽县| 连平县| 南郑县| 柳林县| 黑龙江省| 莱西市| 东阳市| 营口市| 永嘉县| 蚌埠市| 绥中县| 修文县| 宣威市| 永春县| 兴宁市| 海淀区| 舒城县| 瑞昌市| 五华县|