#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
char a[5];
char b[10];
strcpy(a,"nop");
gets(b);
printf("Hello there %s. Value in a is %s.\n",b,a);
exit(0);
}
我需要让程序打印Hello there Leslie. Value in a is Correct.
我尝试在程序中执行任意输入,但我似乎无法忽略某些输入。例如,如果我运行程序并输入:
Leslie\\\\Correct
程序将输出Hello there Leslie\\\\Correct. Value in a is Correct.
如何使用缓冲区溢出从第一部分中删除\\\\Correct
?
答案 0 :(得分:3)
%s
查找空终止字符,即&#39; \ 0&#39;为了知道字符串何时结束。所以你需要输入&#34; Leslie \ 0 ---正确&#34;获得所需的格式。获取将在输入的末尾添加另一个\0
,因此您需要记住这不是真正导致BO ...
抱歉格式不好,我在手机上。
答案 1 :(得分:0)
这是关于在终端中键入null
字符。
以下内容适用于我的计算机(尽管我必须更改代码以使b
存储在低于a
的地址中),但我们假设您的代码有效:
./bufferovfl
Leslie(press ctrl+@)AAAAACorrect
|.........| |...|
| |
the Null any characters but with right repetition to overwrite [a]
character starting with the C
在Leslie
末尾添加空字符,函数gets
将仅将该部分存储在变量b
中,但将继续写入下一个地址并最终覆盖变量{ {1}}。
如果此组合(a
+ ctrl
)失败,您可能还需要查看this文章。