Kali 棧緩衝區溢位

2021-10-10 19:39:15 字數 734 閱讀 2536

堆疊記憶體是執行時實時分配的

與棧溢位有關的暫存器主要是esp,ebp,eip。

esp和ebp都是用於控制當前執行函式棧幀的暫存器。

ebp指向棧幀最高記憶體位址,esp指向棧幀最低記憶體位址。

棧幀:棧幀中存放著函式的引數,區域性變數,及恢復前乙個棧幀所需要的資料。

一旦函式執行完畢,整個棧幀就會被復原,esp和ebp將重新指向呼叫方函式的棧幀。

**過程:**比如我們正在執行乙個c程式,在程式開始時呼叫main主函式,並為其分配棧幀。主函式呼叫另乙個函式myfunction,在為myfunction製備棧幀並移交執行權之前,主函式會記下myfunction結束以後的返回位址,並且把返回位址儲存在幀上。myfunction執行完畢之後,棧幀就會被復原,eip暫存器將載入棧所儲存的返回位址,然後繼續執行main函式的命令。

**原理:**當棧幀中的區域性變數占用記憶體空間越來越大時,棧幀達到最大空間,區域性變數的值可能會覆蓋棧幀的其餘部分,甚至突破棧幀到達更高的記憶體位址。當區域性變數占用記憶體足夠長,就覆蓋了返回位址。eip執行到返回位址時,就會出現找不到位址報錯。如果我們能夠使該棧幀溢位到返回位址,並且能夠修改返回位址,將其替換為另乙個程式在記憶體中的起始位址,我們就能能改變程式原本的正常執行流向,去執行由我們所控制的程式。

緩衝區溢位 棧溢位

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

緩衝區溢位 棧

正義與 共存,推動正義的進步,正義迫使 的昇華,兩者誰是誰非。是非只是它人的定義,兩者都是正確的 在我們除錯程式的時候,我們如何去掉除錯視窗中的cccc 的內容。第一步 開啟專案屬性 c c 生成 基本執行時檢查設定為 未初始化的變數 安全檢查 否 第二步 開啟專案屬性 聯結器 高階 隨機基址為 否...

緩衝區溢位

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