运行最简单的C++程序时,AVG显示访问被拒绝警告。

5

我正在运行一个非常简单的C++程序:

#include <list>
#include <vector>

int main(int argc, char **args) {

}

我打开命令提示符并编译和运行:

g++ whatever.cpp
a.exe

通常情况下,这个程序可以正常工作。它可以编译通过,但是当我运行它时,它会显示“拒绝访问”,并且AVG会弹出一个警告说检测到了威胁Trojan Horse Generic 17.CKZT。我尝试使用微软编译器(cl.exe)进行编译,它可以正常运行。所以我回去添加了以下内容:

#include <iostream>

使用g++编译并运行,这一次它工作得很好。

那么,有人能告诉我为什么AVG会将一个空的main方法报告为木马,但如果包含iostream头文件就不会呢?

更新:

我在main方法中添加了一个返回语句,现在我发现只有当我返回0时才会出现错误。任何其他返回值似乎都可以正常工作。

这是怎么回事?


3
依据我的经验,反病毒软件通常都是不划算的,而在开发机器上则是完全不能接受的。 - Jerry Coffin
略微偏离主题,但据我所知,目前Avast!杀毒软件和NOD32比AVG拥有更好的启发式引擎。 - greyfade
这里有一个很好的答案解释了为什么你的C++程序被AVG标记为病毒:https://dev59.com/3FzUa4cB1Zd3GeqP69fs#17431911 - Eric Leschinski
2个回答

4

你不是第一个遇到杀毒软件误报的人。

可能发生的情况是,杀毒启发式技术在程序中检测到了标准运行库,因为恶意软件也使用它们。当然,合法软件也会使用它们!它没有检测到 iostream 可能意味着 iostream 在恶意软件编写者中不是很流行。


谢谢,由于我刚开始学习C++,知道这样的错误不是因为我做了什么愚蠢的事情,这很好。 - DaveJohnston
1
LOL。不是因为我做了什么蠢事,而是因为别人做了一些愚蠢的事情。对于初学者来说,这并不是一个友好的问题。感谢上帝有StackOverflow。 - Jonathan M Davis

2
如果您只想尽快解决问题,只需将可执行文件夹放入AVG的白名单中即可。
我的首选步骤:
1. 为了安全起见,您应该将可执行文件发送到在线病毒/恶意软件扫描器,例如:
- www.virustotal.com:VirusTotal - 免费在线病毒和恶意软件扫描 - virusscan.jotti.org/en:Jotti's malware scan
2. 如果它们报告“误报”,则将编译后的可执行文件路径插入AVG的白名单中,这样它就不会扫描该文件夹。我不熟悉AVG,但每个防病毒软件都有一个排除扫描文件的选项。
3. 如果您足够勇敢,请调试可执行文件并找到导致问题的调用。
4. 另一种解决方案可能是虚拟化轻量级Linux系统,在其中安装gcc(当然还有g++),并使用该“g++专用环境”来开发命令行应用程序。
第一步是对这个对话的总结。如果您把您编译的源码和“感染”的可执行文件发送给我,我会检查一下。在(C++)的main函数中缺少return语句意味着返回0。

一个不错的答案,但这似乎对于所提出的问题来说有些过度杀伐了。 - Akusete
是的,也许你是对的。但是到底是什么可以消除“恶意”的东西呢?是什么使得#include <iostream>可以产生这样的效果?这是什么?还是另外一个问题? - ch0kee
注意:将我的文件夹添加到AVG中解决了我的问题,方法如下:在“菜单->设置->常规->例外”中浏览文件夹并选中它。完成。 - abdul qayyum
如果您想要快速解决问题,而不是像被接受的答案那样理解问题,那么这应该是被接受的答案。 - abdul qayyum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接