簡體   English   中英

緩沖區溢出未發生

[英]Buffer Overflow not happened

我試過這個示例c代碼:

int main()
{
    int array[5];
    int i;

    for (i = 0; i <= 255; i++)
    {
        array[i] = 10;
    }
}

並使用以下方法編譯它:

gcc -m32 -o a.out buffer2.c

我的問題是為什么沒有分段錯誤?

我使用kali linux 64

vendor_id : 正版英特爾

型號名稱:Intel(R) Core(TM) i3 CPU M 350 @ 2.27GHz

架構:x86_64

CPU 操作模式:32 位、64 位

字節順序:小端


我通過添加這兩行來編輯代碼:

int main()
{
    int x = 12;

    int array[5];
    int i;

    for (i = 0; i <= 255; i++)
    {
        array[i] = 10;
    }

    printf("%d\n", x);
}

這就是結果:

10
Segmentation fault

C 中沒有運行時邊界檢查。寫入數組邊界之外的元素是未定義行為 未定義的行為意味着就標准而言,任何事情都可能發生。 因此,盡管很可能出現分段錯誤,但絕不是保證。

僅僅因為沒有分段錯誤並不意味着沒有緩沖區溢出。 肯定有。 這次只是沒有導致分段錯誤。 這種類型的錯誤很嚴重,可能會導致許多安全問題。 這個故事的寓意是永遠不要導致緩沖區溢出。 它不安全,您不能依靠 C 來保護您。

嘗試:

sudo echo 0 > /proc/sys/kernel/randomize_va_space

然后像這樣再次編譯:

gcc buffer2.c -o buffer2 -fno-stack-protector

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM