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