让我们考虑以下计划:
#include <stdlib.h>
int main(int argc, char **argv){
int a,b;
if (argc != 3)
return -1;
a = atoi(argv[1]);
b = atoi(argv[2]);
a = b ? a/b : 0;
return a;
}
Run Code Online (Sandbox Code Playgroud)
任务是通过在命令行中提供参数来使程序崩溃.
这个问题的答案是:这取决于.
您需要了解的重要信息之一是如何atoi实施以及是否符合标准.该标准对实现细节的描述非常少,并且对输入输出行为更具体.让我们假设一分钟它确实符合标准,并专注于实施.
有几种方法可以有效使用,其中一种是递归的.让我们假设它被实现为头递归算法,这会强制堆栈的堆积.然后,我可以通过提供一个足够长的参数来使这个程序崩溃,它强制atoi进行足够的递归以堆栈溢出并因此使应用程序崩溃.