C homework - 编译代码时发现的木马

时间:2012-11-17 21:32:04

标签: c trojan

我正在编写一些作业(101级)。当我尝试编译代码时,我从位防御者那里获得了一些病毒警报:

#include <stdio.h>

int main ( void ) {
int numbers [10];
int i, temp;

for (i = 1; i <= 10; ++i)
    numbers[i] = 0;

printf("Enter up to 10 integers. input '-1' to finish \n");

for (i = 0; i < 10; i++) {
    scanf("%d", &temp);
    if (temp == -1) {
        break;
    } else {
        numbers [i] = temp - 1;
    }
}

for (i = 1; i <= 10; ++i)
    printf("the numbers are: %d\n", numbers[i]);

return 0;
}

virus alert print screen

我认为问题在于这段代码:

    for (i = 1; i <= 10; ++i)
        numbers[i] = 0;

为什么木马病毒会发出警报?我做了什么?

3 个答案:

答案 0 :(得分:6)

不要注意一些防病毒程序将编译后的项目识别为病毒,它与visual studio一样,只需在防病毒列表中添加例外。 但是你的代码确实存在一些问题。

  • for (i = 1; i <= 10; ++i)不正确,因为C中的数组从0开始,第二次初始化您不需要为循环执行的变量,您可以像任何其他变量一样为它们赋值。
  • numbers [i] = temp - 1将值存储在数组中的方式并不是很好,因为当您执行-1时,您正在改变输入的值。

/*For the array initialization.*/
int numbers[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

/*For inputing the values.*/

for ( i = 0; i < 10; i++ ){
    scanf( "%d", &temp );
    if( temp == -1 ){
        numbers[ i ] = -1;
        break;
    else{
        numbers[ i ] = temp;
    }
}

/*For the printing. */

for( i = 0; i < 10 ; i++ ){
    if( numbers[ i ] == -1 ){
        break;
    }
    printf( "numbers[%d] is %d", i, numbers[ i ] );
}

答案 1 :(得分:5)

触发缓冲区溢出。你的数组'数字'是10项大项,你可以访问第11项。

答案 2 :(得分:4)

使用i=0代替i =1,因为在C数组索引中从0开始

数组的大小是10,所以最后一个索引是9 所以你正在访问numbers[10]中超出范围的数组索引,所以它是undefined behaviour

数组将是这样的:

numbers[0] ,numbers[1], . . . numbers[9]

将代码修改为:

for(i=0;i<10;i++)
  printf("%d\t",numbers[i]);