欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

數據溢出是什么意思?

方一強2年前12瀏覽0評論

數據溢出

在計算機中,當要表示的數據超出計算機所使用的數據的表示范圍時,則產生數據的溢出。

溢出原因

數據類型超過了計算機字長的界限就會出現數據溢出的情況。導致內存溢出問題的原因有很多,比如:

(1)使用非類型安全(non-type-safe)的語言如C/C++等。

(2)以不可靠的方式存取或者復制內存緩沖區。

(3)編譯器設置的內存緩沖區太靠近關鍵數據結構。

因素分析

1.內存溢出問題是C語言或者C++語言所固有的缺陷,它們既不檢查數組邊界,又不檢查類型可靠性(type-safety)。眾所周知,用C/C++語言開發的程序由于目標代碼非常接近機器內核,因而能夠直接訪問內存和寄存器,這種特性大大提升了C/C++語言代碼的性能。只要合理編碼,C/C++應用程序在執行效率上必然優于其它高級語言。然而,C/C++語言導致內存溢出問題的可能性也要大許多。其他語言也存在內存溢出問題,但它往往不是程序員的失誤,而是應用程序的運行時環境出錯所致。

2.當應用程序讀取用戶(也可能是惡意攻擊者)數據,試圖復制到應用程序開辟的內存緩沖區中,卻無法保證緩沖區的空間足夠時(換言之,假設代碼申請了N字節大小的內存緩沖區,隨后又向其中復制超過N字節的數據)。內存緩沖區就可能會溢出。想一想,如果你向12盎司的玻璃杯中倒入16盎司水,那么多出來的4盎司水怎么辦?當然會滿到玻璃杯外面了!

3.最重要的是,C/C++編譯器開辟的內存緩沖區常常鄰近重要的數據結構。假設某個函數的堆棧緊接在在內存緩沖區后面時,其中保存的函數返回地址就會與內存緩沖區相鄰。此時,惡意攻擊者就可以向內存緩沖區復制大量數據,從而使得內存緩沖區溢出并覆蓋原先保存于堆棧中的函數返回地址。這樣,函數的返回地址就被攻擊者換成了他指定的數值;一旦函數調用完畢,就會繼續執行“函數返回地址”處的代碼。非但如此,C++的某些其它數據結構,比如v-table、例外事件處理程序、函數指針等,也可能受到類似的攻擊。