我是C的新手,作为课程作业,我的导师希望我们使用缓冲区溢出。我在网上找到了以下内容作为示例,我无法弄清楚如何使用它!
#include <stdio.h>
char temp[32];
unsigned int setThis=1;
printf("Enter your temp: \n");
fgets(temp, 34, stdin); //Takes a 34 buffer size when temp can only be 32
printf("Value of you setThis: %d", setThis);
所以我的问题是,我如何设置&#34; setThis&#34;到某个变量? 任何帮助表示赞赏,BeastlyJman。
答案 0 :(得分:1)
没有保证这样做的方法,但通常将变量放在堆栈上,使得第一个变量在内存中是最后一个。因此,如果您在 setThis
之前声明temp[32]
,那么setThis
将位于temp
数组的末尾,您可以覆盖它。
但正如我所说,并不能保证编译器会做什么。您应该检查编译器生成的汇编代码,以查看temp
和setThis
的位置。
此外,如果您将temp
的尺寸缩小为temp[8]
,然后将10
传递给fgets
,则可以节省一些打字费用。要导致溢出,您需要输入比缓冲区更多的字符。