緩衝區溢位

2021-04-28 11:39:25 字數 1527 閱讀 7598

緩衝區溢位是指當電腦程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。作業系統所使用的緩衝區又被稱為堆疊,在各個操作程序之間,指令被臨時儲存在堆疊當中,堆疊也會出現緩衝區溢位。

上溢是當乙個超長的資料進入到緩衝區時,超出部分被寫入上級緩衝區,上級緩衝區存放的可能是資料、上一條指令的指標,或者是其他程式的輸出內容,這些內容都被覆蓋或者破壞掉。可見一小部分資料或者一套指令的溢位就可能導致乙個程式或者作業系統崩潰。

下溢是當乙個超長的資料進入到緩衝區時,超出部分被寫入下級緩衝區,下級緩衝區存放的是下一條指令的指標,或者是其他程式的輸出內容。

快取(cache memory)是硬碟控制器上的一塊記憶體晶元,具有極快的訪問速度,它是硬碟內部儲存和外界介面之間的緩衝器。由於硬碟的內部資料傳輸速度和外界介面傳輸速度不同,快取在其中起到乙個緩衝的作用。快取的大小與速度是直接關係到硬碟的傳輸速度的重要因素,能夠大幅度地提高硬碟整體效能。當硬碟訪問零碎資料時需要不斷地在硬碟與記憶體之間交換資料,如果有大快取,則可以將那些零碎資料暫存在快取中,減小外系統的負荷,也提高了資料的傳輸速度。

硬碟的快取主要起三種作用:一是預讀取。當硬碟受到cpu指令控制開始讀取資料時,硬碟上的控制晶元會控制磁頭把正在讀取的簇的下乙個或者幾個簇中的資料讀到快取中(由於硬碟上資料儲存時是比較連續的,所以讀取命中率較高),當需要讀取下乙個或者幾個簇中的資料的時候,硬碟則不需要再次讀取資料,直接把快取中的資料傳輸到記憶體中就可以了,由於快取的速度遠遠高於磁頭讀寫的速度,所以能夠達到明顯改善效能的目的;二是對寫入動作進行快取。當硬碟接到寫入資料的指令之後,並不會馬上將資料寫入到碟片上,而是先暫時儲存在快取裡,然後傳送乙個「資料已寫入」的訊號給系統,這時系統就會認為資料已經寫入,並繼續執行下面的工作,而硬碟則在空閒(不進行讀取或寫入的時候)時再將快取中的資料寫入到碟片上。雖然對於寫入資料的效能有一定提公升,但也不可避免地帶來了安全隱患——如果資料還在快取裡的時候突然掉電,那麼這些資料就會丟失。對於這個問題,硬碟廠商們自然也有解決辦法:掉電時,磁頭會借助慣性將快取中的資料寫入零磁軌以外的暫存區域,等到下次啟動時再將這些資料寫入目的地;第三個作用就是臨時儲存最近訪問過的資料。有時候,某些資料是會經常需要訪問的,硬碟內部的快取會將讀取比較頻繁的一些資料儲存在快取中,再次讀取時就可以直接從快取中直接傳輸。

快取容量的大小不同品牌、不同型號的產品各不相同,早期的硬碟快取基本都很小,只有幾百kb,已無法滿足使用者的需求。2mb和8mb快取是現今主流硬碟所採用,而在伺服器或特殊應用領域中還有快取容量更大的產品,甚至達到了16mb、64mb等。

大容量的快取雖然可以在硬碟進行讀寫工作狀態下,讓更多的資料儲存在快取中,以提高硬碟的訪問速度,但並不意味著快取越大就越出眾。快取的應用存在乙個演算法的問題,即便快取容量很大,而沒有乙個高效率的演算法,那將導致應用中快取資料的命中率偏低,無法有效發揮出大容量快取的優勢。演算法是和快取容量相輔相成,大容量的快取需要更為有效率的演算法,否則效能會大大折扣,從技術角度上說,高容量快取的演算法是直接影響到硬碟效能發揮的重要因素。更大容量快取是未來硬碟發展的必然趨勢。

緩衝區溢位

緩衝區溢位,簡單的說就是計算機對接收的輸入資料沒有進行有效的檢測 理想的情況是程式檢查資料長度並不允許輸入超過緩衝區長度的字元 向緩衝區內填充資料時超過了緩衝區本身的容量,而導致資料溢位到被分配空間之外的記憶體空間,使得溢位的資料覆蓋了其他記憶體空間的資料。通過往程式的緩衝區寫超出其長度的內容,造成...

緩衝區溢位 棧溢位

1 緩衝區概念 緩衝區 buffer 又稱為快取,它是記憶體空間的一部分。也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來緩衝輸入或輸出的資料,這部分預留的空間就叫做緩衝區。使用緩衝區有兩個好處 1 減少實際物理讀寫次數 2 緩衝區在建立時就被分配記憶體,這塊記憶體區域一直被重用,可以...

緩衝區溢位保護

1.堆疊記憶體位址隨機化,程式每次執行的堆疊位址都不一樣 空出一段隨機偏移 關閉方法 sysctl w kernel.randomize va space 0 echo 0 proc sys kernel randomize va space 2.棧 不可執行 如果棧中 不可執行的話,緩衝區溢位的s...