vs解決無符號型別,安全開發生命週期(SDL)檢查

2021-07-10 23:03:07 字數 1205 閱讀 3200

前面在學習使用google的protobuf時在vs2012中一直無法編譯編譯通過,經過查詢一些資料原來發現,並不是protobuf的問題,而是自己在使用vs2012時,沒有完全了解vs2012的強大功能,和跟以前vs2010的差別,導致無法編譯通過。

現在就來說說為什麼沒有編譯通過,在vs2012建立專案時,會有乙個勾選項,叫做「安全開發生命週期(sdl)檢查」,這個東西是微軟在vs2012新推出的東西,為了是能更好的監管開發者的**安全,如果勾選上這一項,那麼他將嚴格按照sdl的規則編譯**,會有一些以前常用的函式無法通過編譯,比如在vs2010中的scanf是warning那麼在vs2012中就是error了。

檢視msdn中對sdl的描述,sdl檢查會視以下告警為錯誤:

/sdl 啟用警告

等效的命令列開關 描述

c4146

/we4146

一元負運算子應用於無符號型別,從而導致無符號結果。

c4308

/we4308

乙個負整型常數轉換為無符號型別,從而導致乙個可能無意義結果。

c4532

/we4532

c4533

/we4533

初始化變數的**不會執行。

c4700

/we4700

使用未初始化的區域性變數。

c4703

/we4703

對乙個潛在的未初始化的區域性指標變數的使用。

c4789

/we4789

當使用時,請緩衝區溢位特定 c 執行時 (crt) 函式。

c4995

/we4995

使用函式的標deprecated。

c4996

/we4996

使用函式的標記作為deprecated。

也就是在編譯的時候,當sdl檢查啟用時,編譯器會嚴格檢測緩衝區的溢位,並且會在delete某個指標時,自動為這個指標定義乙個非有效的值,防止在delete以後仍用到這個指標時出錯。還有就是會在你定義乙個物件時,自動為這個物件賦值零。

從這些功能來看,有些功能還是不錯的,不但方便了程式設計師使用也增強了程式的健壯性,但是對老版本程式的相容就會出現問題,以前程式中編譯通過的內容也許在vs2012中就沒有辦法通過,還是大家根據自己的習慣自行考慮是否使用這個東西吧。

另:還有乙個選擇開啟和關閉sdl檢查的位置就是:專案屬性->配置屬性->c/c++->sdl檢查,選測是或者否

**:

應用安全 微軟的安全開發生命週期 SDL

0x01 sdl介紹 安全開發生命週期 sdl 即security development lifecycle,是乙個幫助開發人員構建更安全的軟體和解決安全合規要求的同時降低開發成本的軟體開發過程。0x02 sdl流程框架 自2004年起,sdl就成為microsoft全公司的計畫和強制施行政策,其...

軟體安全開發生命週期讀書筆記

分階段 0.教育和意識 1.微軟成功的原因在於管理層支援和教育與培訓.2.工程師必須對基本的安全弱點 常見的安全漏洞型別 基本的安全設計有所了解。3.主要教育如下 軟體工程原理 歷史專案總結,經驗,教訓 軟體架構 測試方法 事件交換技術 可信度 可伸縮性 理解未來技術方向 各種技術例如xml,asp...

軟體安全開發生命週期讀書筆記

分階段 0.教育和意識 1.微軟成功的原因在於管理層支援和教育與培訓.2.工程師必須對基本的安全弱點 常見的安全漏洞型別 基本的安全設計有所了解。3.主要教育如下 軟體工程原理 歷史專案總結,經驗,教訓 軟體架構 測試方法 事件交換技術 可信度 可伸縮性 理解未來技術方向 各種技術例如xml,asp...