作者Laputaet3 (单纯的美好)
看板C_and_CPP
标题Re: [问题] 关於overflow
时间Mon May 4 18:24:23 2009
※ 引述《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
1F:→ MOONRAKER:不错 可是恶意程式码不是shell code吧 05/04 19:42
2F:→ MOONRAKER:放在记忆体里面的一定得是机械码 05/04 19:44
3F:→ MOONRAKER:恶意程式码好像是叫malcode (=malicious code) 05/04 19:45
4F:推 stonehomelaa:记得以前修课也是叫shell code呀 05/04 19:48
5F:→ stonehomelaa:阿 shellcode才对 05/04 19:49
6F:→ Laputaet3:shellcode就是machine code喔~类似 \x90\x90 即nop nop 05/04 21:44
7F:→ Asker97:谢谢!! 05/05 21:32