簡體   English   中英

為什么當strcpy()導致緩沖區溢出時沒有分段錯誤?

[英]Why no segmentation fault when strcpy() causes an buffer overflow?

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

void main() {
    char *a = "aaaaaaaaaaaaaaaa";
    char b[1];
    strcpy(b, a);
    printf("%s\n", b);
}

運行時,它將打印:

aaaaaaaaaaaaaaaa

如果我將* a設置為超長,例如* a =“ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”,則將導致段錯誤。

為什么在第一種情況下沒有溢出?

當您的程序嘗試訪問不屬於您程序的虛擬地址空間的內存時,就會發生分段錯誤。 如果您只是在原始復制目標位置之后覆蓋了一些內容,則不會發生這種情況。

有緩沖區溢出,並不意味着它總是會引起分段錯誤。 這是未定義的行為-可能存在段錯誤。 這取決於變量在內存中的“位置”。

似乎正常工作,或者因此而崩潰,是未定義行為的有效形式。 當程序具有UB時, 任何事情都可能發生。 這就是為什么它非常不可取。

暫無
暫無

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

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