C中的缓冲区溢出与gets
Buffer overflow in C with gets
我是 C 语言的新手,作为一项 class 作业,我的导师希望我们玩弄缓冲区溢出。我在网上找到了下面的例子,不知道怎么用!
#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);
所以我的问题是,如何将 "setThis" 设置为某个变量?
任何帮助表示赞赏,BeastlyJman。
没有保证的方法可以做到这一点,但通常会将变量放在堆栈上,以便第一个变量在内存中排在最后。所以如果你在setThis
之前声明 temp[32]
,那么setThis
将在temp
数组的末尾,你可以覆盖它。
但正如我所说,不能保证编译器会这样做。您真的应该检查编译器生成的汇编代码以查看 temp
和 setThis
所在的位置。
此外,如果将 temp
的大小减小为 temp[8]
,然后将 10
传递给 fgets
,则可以节省一些输入时间。要导致溢出,您需要键入比缓冲区可容纳的字符更多的字符。
我是 C 语言的新手,作为一项 class 作业,我的导师希望我们玩弄缓冲区溢出。我在网上找到了下面的例子,不知道怎么用!
#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);
所以我的问题是,如何将 "setThis" 设置为某个变量? 任何帮助表示赞赏,BeastlyJman。
没有保证的方法可以做到这一点,但通常会将变量放在堆栈上,以便第一个变量在内存中排在最后。所以如果你在setThis
之前声明 temp[32]
,那么setThis
将在temp
数组的末尾,你可以覆盖它。
但正如我所说,不能保证编译器会这样做。您真的应该检查编译器生成的汇编代码以查看 temp
和 setThis
所在的位置。
此外,如果将 temp
的大小减小为 temp[8]
,然后将 10
传递给 fgets
,则可以节省一些输入时间。要导致溢出,您需要键入比缓冲区可容纳的字符更多的字符。