请各位大神帮忙看句代码

各位大神请看:
Linux下(bof.c文件):
#include
int main(int argc, char **argv) {
char buffer[256];
if(argc != 2) {
exit(0);
}
printf("%p\n", buffer);
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
return 0;
}

然后编译:
$ gcc -m64 bof.c -o bof -z execstack -fno-stack-protector
运行:
$ ./bof $(python -c 'print "A" * 300')
结果:
0x7fffffffdcd0
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA
Segmentation fault (core dumped)

在下想问的是:运行时的那句命令行(即$ ./bof $(python -c 'print "A" * 300'))是什么意思?
上面的例子是在下从网上看到的,在下Linux懂的不多,还望大神们指点。
能否正确理解那句话,关乎到在下能否很好地完成作业,所以还望有知道的大神不吝赐教,在下先行谢过!

1个回答

调用python输出300个'A'构成的字符串,作为参数传给你的程序,你的程序用argv[1]接收。而你的程序开的缓冲区只有256个,结果造成溢出。因为strcpy不会检查缓冲区不足。

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复zpcdcsdn: 和函数没有关系。为什么用python,也许作者喜欢用吧。
4 年多之前 回复
zpcdcsdn
zpcdcsdn 不好意思,电脑太卡,所以一句话打了多行。
4 年多之前 回复
zpcdcsdn
zpcdcsdn 2.为什么要调用pathon?
4 年多之前 回复
zpcdcsdn
zpcdcsdn 1.这里是将函数调用作为参数吗?
4 年多之前 回复
zpcdcsdn
zpcdcsdn 1.这里是将函数调用作为参数吗?
4 年多之前 回复
zpcdcsdn
zpcdcsdn 1.这里是将函数调用作为参数吗?
4 年多之前 回复
zpcdcsdn
zpcdcsdn 1.这里是将函数调用作为参数吗?
4 年多之前 回复
zpcdcsdn
zpcdcsdn 1.这里是将函数调用作为参数吗?
4 年多之前 回复
zpcdcsdn
zpcdcsdn 谢谢大神!大神说的没错,这的确是Linux缓冲区溢出的例子。您的答案对我很有帮助。如果您有时间,还望您对一些细节加以指教:
4 年多之前 回复
zpcdcsdn
zpcdcsdn 谢谢大神!大神说的没错,这的确是Linux缓冲区溢出的例子。您的答案对我很有帮助。如果您有时间,还望您对一些细节加以指教:
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问