簡體   English   中英

為什么GCC不會發生緩沖區溢出?

[英]Why doesn't buffer overflow occur with GCC?

我剛剛學習緩沖區溢出。 我試圖使用GCC復制它。 這是我寫的代碼。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int value = 5;
    char buffer_one[8], buffer_two[8];

    strcpy(buffer_one, "one");
    strcpy(buffer_two, "two");

    printf("[BEFORE] buffer_two is at %p and contains %s\n", buffer_two, buffer_two);
    printf("[BEFORE] buffer_one is at %p and contains %s\n", buffer_one, buffer_one);
    printf("[BEFORE] value is at %p and contains %d\n\n", value, value);

    printf("[STRCPY] copying %d bytes into buffer_two\n\n", strlen(argv[1]));
    strcpy(buffer_two, argv[1]);

    printf("[BEFORE] buffer_two is at %p and contains %s\n", buffer_two, buffer_two);
    printf("[BEFORE] buffer_one is at %p and contains %s\n", buffer_one, buffer_one);
    printf("[BEFORE] value is at %p and contains %d\n\n", value, value);

    return 0;
}

好像它應該工作,對嗎? Buffer_two和buffer_one在內存中彼此相鄰。

[BEFORE] buffer_two is at 0x7fff56ff2b68 and contains two
[BEFORE] buffer_one is at 0x7fff56ff2b70 and contains one
[BEFORE] value is at 0x5 and contains 5

然而,在此之后不久......

[STRCPY] copying 14 bytes into buffer_two

Abort trap: 6

C怎么認識到這個? 一些黑客如何執行實際工作的更復雜的緩沖區溢出?

在您的情況下,您通過嘗試8 char的內存區域中寫入14 char ,成功地產生了緩沖區溢出。

一旦您寫入已分配的內存,行為將不確定。 所以, Abort消息就在那里。

相關: 未定義的行為

為什么GCC不會發生緩沖區溢出?

嗯,這種情況正好發生在你的情況下。 這就是為什么,作為副作用,您可以看到中止消息。

發生緩沖區溢出時未完成的情況 這意味着任何事情都可能發生。 例如, 惡魔可能會從你的鼻子飛出來

這里發生的事情是你的程序崩潰了。 我寧願無聊的待着。

暫無
暫無

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

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