程序将返回分段错误错误的可能情况是什么?

时间:2017-04-25 21:35:23

标签: segmentation-fault

void CopyData (char *szdata) {
char cDest[32];
strcpy(CDest, szData);
printf("%s\n", cDest);
}`enter code here`

int main(int argc, char **argv){
CopyData(argv[1]);
}

攻击者如何在此代码中找到漏洞并利用它?

1 个答案:

答案 0 :(得分:0)

好吧,你使用strcpy()复制到一个固定的char数组中。如果argv[1]的长度大于32,那么您将超出数组中分配的空间,这可能会导致问题。

此外,您无需验证其存在即可访问argv[1]argvchar**,表示指向char字符串指针数组的指针。 argc包含这些char字符串的数量。当您在未验证argv[1]大于或等于2的情况下阅读argc时,您可能正在阅读垃圾。

这些错误意味着如果出现以下情况,您的程序将崩溃或出现未确定/不正常的行为:

  1. 从命令行启动程序时,给出的参数少于两个
  2. 第二个参数的长度大于32个字符