2013-11-09 4 views
0

Я пытался сделать программу в C++, когда заметил что-то странное: каждый раз, когда часть программы использовала номер около 2048 (я думаю, что где-то выше 2001 года и меньше 3000), он обнаруживается как подозрительный файл и отправляется в сундук «Аваст!». изменение имени переменной, похоже, не имеет значения. Я создавал структуру, чтобы добавить вещи к более позднему , это фрагмент из этого. Я могу догадаться, где он получает обнаружение по тому, как он выглядит, но он никогда не беспокоит скомпилированный исполняемый файл, если он не имеет определенного диапазона чисел , почему это может быть?Почему антивирус, похоже, нацелен на конкретные номера?

int maxstep=2100; 
int maaa[2100]; 
int curinst; 

int main() 
{ 
cout<<"Initializing maaa..."<<endl; 

    for(int i=0; i<maxstep; i++) 
    { 
     maaa[i]=0; 
     //cout<<"MEM:"<<i<<" "<<maaa[i]<<endl; 
    } 
cout<<"starting core"<<endl; 
int stepcnt=0; 
for(;;) 
{ 
    if(stepcnt<maxstep) 
    { 
      curinst=maaa[stepcnt]; 

    } 
    else 
    { 
     cout<<"."; 
    stepcnt=0; 
    } 
stepcnt++; 
} 
+1

Это не вопрос о том, как решить проблему программирования. Это вопрос о дисфункциональном антивирусном программном обеспечении. В частности, речь идет об Avast !, и, вероятно, должна быть доведена до их отдела обслуживания клиентов. –

+0

Это когда программа запускается или после ее компиляции? – templatetypedef

ответ

1

В защите от вирусов этот код делает несколько вещей, которые кажутся странными. Если бы я оценивал программу по вероятности быть вирусом, код, который вы опубликовали, кажется довольно вероятным.

Во-первых, вы указали свои 3 первичные переменные как глобальные переменные, но не в какой-либо локальной области. Это необычно, но это может быть необходимо.

Затем вы записываете одно и то же значение (0) в каждый элемент массива. Если бы это было предназначено для инициализации массива, лучше было бы использовать memset или calloc. Эта реализация делает много записей в глобальной памяти, каждая из которых, вероятно, является большим хранилищем. Вирус сделал бы это, если бы пытался испортить состояние программы.

И, наконец, ваша программа вводит бесконечный цикл, в котором читается и записывается из глобальной памяти. Каждая из этих операций, вероятно, является большой нагрузкой, за которой следует большой магазин. Если в антивирусном сканере есть какая-то метрика при больших нагрузках и в разных магазинах в секунду, ваша программа будет превышать лимит.

+1

«дальний магазин», «далекая нагрузка», о, черт возьми, я не слышал этого с 16-битного раза. Линия памяти ... (да, я здесь иронична, этих вещей больше нет, поскольку охраняемая плоская адресация стала нормой около 20 лет назад или около того ...) В любом случае, рад видеть здесь несколько старых таймеров. :) – syam

+0

Вы правы. Эти операции вымерли много лет назад и здесь конкретно не проблема. Я называет их здесь только для примера того, что «может» происходить, а не буквально. Внутренности компилятора и вирусного программного обеспечения, по-видимому, относятся к доступу к глобальным переменным по-разному, но я не знаю конкретной инструкции, которую он может использовать. – Holly

+0

О, не слишком меня относишь, только упоминание «далекого» и «ближнего» было достаточно, чтобы начать меня. ;) Что касается C++, в коде OP нет ничего плохого **, но я не знаю много об антивирусах, так как я не использую Windows. Все это было просто джейпом. :) – syam

Смежные вопросы