Re: [問題] 關於overflow
※ 引述《Asker97 (市井小民)》之銘言:
: C程式書上寫的是當超出配給的array空間時
: 會發生overflow 那會有甚麼錯誤現象呢?
: 在dev c++下寫
: #include <stdio.h>
: #include <stdlib.h>
: #include <string.h>
: int main(void)
: {
: char y[3];
: int i=1;
: do{
: printf("請輸入字串\n");
: scanf("%s",&y);
: printf("%s",y);
: }
: while(i=2);
: return 0;
: }
以intel CPU為例 因為是little endian 所以以下為可能的stack layout
low ----------
|____i___|
|____i___|
|____i___|
|____i___|
|__y[0]__|
|__y[1]__|
|__y[2]__|
.
.
________
|___ret__|
|___ret__|
|___ret__|
|___ret__|
high
可能發生的問題很明顯 若y buffer可以無限制寫入
將可能蓋到 return address 例如將ret蓋成 0x55667788
並事先在此位址插入shell code(即惡意程式碼)
那結果會很high!!
在此例子裡面防範方法為將 scanf("%s",&y)
改成 scanf("%3s",&y) 作寫入限制
: 只給了3這麼小的array空間
: 但是發現輸入ABCDEFGHIUJKLM.... 都還是可以正常運作@@
: 請問overflow出錯是什麼情況呢? 謝謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.208.235
→
05/04 19:42, , 1F
05/04 19:42, 1F
→
05/04 19:44, , 2F
05/04 19:44, 2F
→
05/04 19:45, , 3F
05/04 19:45, 3F
推
05/04 19:48, , 4F
05/04 19:48, 4F
→
05/04 19:49, , 5F
05/04 19:49, 5F
→
05/04 21:44, , 6F
05/04 21:44, 6F
→
05/05 21:32, , 7F
05/05 21:32, 7F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
18
34