我今天正在学习缓冲区溢出,并且遇到了许多易受攻击的程序示例。让我好奇的是,如果有任何理由使用这样的程序参数:
int main(int argc, char *argv[])
{
char argument_buffer[100];
strcpy(argument_buffer, argv[1]);
if(strcmp(argument_buffer, "testArg") == 0)
{
printf("Hello!\n");
}
// ...
}
而不是简单地:
int main(int argc, char *argv[])
{
if(strcmp(argv[1], "testArg") == 0)
{
printf("Hello!\n");
}
}
请注意,我知道strcpy
等的缺点 - 这只是一个例子。我的问题是 -使用临时缓冲区来存储来自 argv 的参数有什么真正的理由吗?我假设没有,但因此我很好奇,为什么它出现在溢出示例中,而实际上它从未使用过?也许是因为纯粹的理论。