Re: [問題] 關於overflow

看板C_and_CPP (C/C++)作者 (單純的美好)時間16年前 (2009/05/04 18:24), 編輯推噓1(106)
留言7則, 4人參與, 最新討論串1/2 (看更多)
※ 引述《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
不錯 可是惡意程式碼不是shell code吧
05/04 19:42, 1F

05/04 19:44, , 2F
放在記憶體裡面的一定得是機械碼
05/04 19:44, 2F

05/04 19:45, , 3F
惡意程式碼好像是叫malcode (=malicious code)
05/04 19:45, 3F

05/04 19:48, , 4F
記得以前修課也是叫shell code呀
05/04 19:48, 4F

05/04 19:49, , 5F
阿 shellcode才對
05/04 19:49, 5F

05/04 21:44, , 6F
shellcode就是machine code喔~類似 \x90\x90 即nop nop
05/04 21:44, 6F

05/05 21:32, , 7F
謝謝!!
05/05 21:32, 7F
文章代碼(AID): #19_i9QqA (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19_i9QqA (C_and_CPP)