欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c語言/c++溢出問題淺談 原創(chuàng)

原創(chuàng)  更新時間:2021年02月24日 10:56:02   原創(chuàng) 作者:Mr Six  
這篇文章主要給大家介紹了關于c語言/c++溢出問題的相關資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在c語言或是c++中有一類很典型的問題,那就是溢出。

如果說溢出對程序有什么危害的話,好像就是在編譯的時候會報錯,運行的時候會崩潰。但是當有了研究安全的人之后,安全性問題就會隨之出現了。

在開發(fā)的階段,由于各種壓力的迫使之下,往往開發(fā)團隊都是拼命地趕工期,先把功能實現了,后期再慢慢地打補丁完善,這就容易造成很多問題沒有得到充分的考慮。在眾多溢出類型中,我覺得的最容易理解的應該是數組的溢出。說白了,就是在調用數組成員的時候超出下標了,這就是數組的溢出??傊?,在有涉及到數據的邊界問題上,就可能會發(fā)生溢出的情況。

為了避免反匯編界面太過于讓人頭大,所以就先寫一小段代碼來打印一下內存里面數據的存儲情況。

這個程序運行結果是這樣的。

從結果里可以看到,在內存里(指的是程序運行的虛擬內存而非物理內存),短整型變量a,b和數組c之間的距離還是很近的。
下面是產生越界的代碼

在利用指針實現輸出之前,有對數組c的成員賦值成666的操作,至于要給多少個c的成員賦值,這個和用戶的輸入n有關系。

先輸入個2,看輸出還是正常的

當輸入3時,可以看到b的值被覆蓋成了666

當輸入變成5的時候,a,b都被覆蓋了

要說明的一點是,現在寫代碼基本不用擔心這個問題,因為像visual studio這樣的編譯器會自動檢查有沒有越界,我的這個程序之所以能夠越界是因為我把visual studio里面有關安全檢查的選項全給關了。

我這個是直接覆蓋變量的值,對于程序的走向還沒有什么影響。假如,精心構造一段輸入,使變量指針的值被覆蓋,就完全可以改變程序的走向,甚至使其指向一段惡意函數的地址,那么在使用該指針時候,就會導致惡意代碼的執(zhí)行,從而導致非常嚴重的安全問題。

除了數組溢出之外,還有整數溢出,緩沖區(qū)溢出,棧溢出,字符串溢出等等。整數溢出在Linux服務器上經常被黑客拿來進行提權。在一些存在內核溢出漏洞的Linux系統(tǒng)里,他們可以通過專門的提權exp來對gid和uid進行溢出,將用戶id的gid和uid權限設置為0,從而獲得超級管理員權限。

要解決這一類問題也很簡單,就是程序一定要做溢出檢查,還有就是盡量不要用像scanf(),strcpy()這樣的C語言內置的函數,它們都有一個缺陷,就是不做溢出檢查,很可能會導致各種各樣的溢出,建議是替換成帶有_s后綴的安全函數,即scanf_s(),strcpy_s()。這些都是是微軟自己寫的,安全性有很大提升。但缺點是,安全函數只在visual studio下能用,別的編譯器識別不了。所以說,安全也是要付出代價的。

值得注意的是,漏洞的危害性也不在于漏洞本身,而是在于利用它的方法。同樣的漏洞,在不同人看來利用的方式也不同,所帶來的危害也程度也不盡相同。只有趕在攻擊者之前,不斷地發(fā)現漏洞,修補漏洞,才能最大程度上避免安全問題。

總結

本文作者:Mr Six

本文為腳本之家公眾號(ID:jb51net)專欄作者投稿文章,如果你也有投稿需求,可以點擊這里

更多優(yōu)質文章,可以關注腳本之家公眾號(ID:jb51net)查看

(微信掃碼關注,獲取更多內容)

相關文章

  • C++中隱式類型轉換學習筆記

    C++中隱式類型轉換學習筆記

    在本篇文章里小編給大家整理的是一篇關于C++中隱式類型轉換學習筆記內容,有興趣的跟著小編來學習下吧。
    2020-02-02
  • C語言實現學生信息管理系統(tǒng)(文件版)

    C語言實現學生信息管理系統(tǒng)(文件版)

    這篇文章主要為大家詳細介紹了C語言實現學生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Qt禁止程序多開的實現示例

    Qt禁止程序多開的實現示例

    本文主要介紹了Qt 禁止程序多開的實現示例,主要介紹了三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09
  • C++中string轉換為char*類型返回后亂碼問題解決

    C++中string轉換為char*類型返回后亂碼問題解決

    這篇文章主要介紹了C++中string轉換為char*類型返回后亂碼問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • C++using聲明和using編譯指令

    C++using聲明和using編譯指令

    這篇文章主要介紹了C++using聲明和using編譯指令,C++當中提供了兩種機制來簡化對名稱空間中名稱的使用。using聲明使特定的標識符keys,using編譯指令使整個名稱空間可用。下面我們就來看看這兩種機制的相關資料吧,需要的小伙伴可以參考一下
    2021-12-12
  • C語言指針入門的簡單實例教程

    C語言指針入門的簡單實例教程

    這篇文章主要給大家介紹了關于C語言指針入門的簡單實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • C++詳解Primer文本查詢程序的實現

    C++詳解Primer文本查詢程序的實現

    這個程序還是比較復雜的,把這句話作為文章的開頭可以看出它的真實性.....這篇文章主要介紹了文本查詢程序的實現,下面我們一起來看看
    2022-06-06
  • C語言簡明講解類型轉換的使用與作用

    C語言簡明講解類型轉換的使用與作用

    類型轉換(type?cast),是高級語言的一個基本語法。它被實現為一個特殊的運算符,以小括號內加上類型名來表示,接下來讓我們一起來詳細了解
    2022-04-04
  • C/C++產生隨機數函數簡單介紹

    C/C++產生隨機數函數簡單介紹

    這篇文章主要為大家詳細介紹了C/C++產生隨機數函數的實現方法,如何使用C/C++產生隨機數函數,感興趣的小伙伴們可以參考一下
    2016-04-04
  • C++靜態(tài)持續(xù)變量介紹

    C++靜態(tài)持續(xù)變量介紹

    這篇文章主要介紹了 C++靜態(tài)持續(xù)變量,靜態(tài)持續(xù)變量的定義C++和C語言是一樣的,它擁有三種鏈接性,即外部鏈接性、內部連接性和無鏈接性。其中外部鏈接性指的是可以在其他文件中訪問,內部鏈接性指的是只能在當前文件訪問,需要的朋友可以參考一下
    2021-11-11

最新評論