[英]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.