5

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

#include <list>
#include <vector>

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

}

我转到命令提示符并编译并运行:

g++ whatever.cpp
a.exe

通常这工作得很好。它编译得很好,但是当我运行它时,它说 Access Denied 和 AVG 弹出告诉我已经检测到威胁Trojan Horse Generic 17.CKZT。我尝试使用 Microsoft Compiler (cl.exe) 再次编译,它运行良好。所以我回去,并补充说:

#include <iostream>

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

那么谁能告诉我为什么 AVG 会将空的 main 方法报告为特洛伊木马,但如果包含 iostream 标头则不会?

更新:

我在 main 方法中添加了一个 return 语句,现在我发现如果我返回 0,我只会得到错误。任何其他返回值,它似乎工作正常。

这里发生了什么?

4

2 回答 2

4

您不是第一个遇到防病毒软件误报的人。

可能发生的情况是,由于恶意软件也使用它们,因此防病毒启发式算法在您的程序中存在的标准运行时库上被绊倒了。当然,合法软件也使用它们!它没有绊倒的事实iostream可能意味着它iostream在恶意软件编写者中不太受欢迎。

于 2010-06-17T22:57:49.900 回答
2

如果您只想尽快解决问题,
只需将可执行文件的文件夹放入 AVG 的白名单即可。

我的首选步骤:

  1. 为了安全起见,您应该将可执行文件发送
    到在线病毒/恶意软件扫描程序,如下所示:
    • www.virustotal.com : VirusTotal - 免费在线病毒和恶意软件扫描
    • virusscan.jotti.org/en:Jotti 的恶意软件扫描

  2. 如果他们报告“误报”,则将已编译的可执行文件的路径
    插入 AVG 的白名单,因此它不会扫描该文件夹。我不熟悉 AVG,
    但每个防病毒软件都可以选择从扫描中排除文件。

  3. 如果您足够勇敢,请调试可执行文件并找到导致调用的原因。

  4. 另一种解决方案可能是虚拟化轻量级 linux 系统,
    在其上安装 gcc(当然是 g++),然后使用“g++ 专用环境”
    来开发命令行应用程序。


// 第一步是对这次对话的总结。
// 如果您将源代码和您编译的“受感染”可执行文件发给我,我会检查它。 // (C++)函数中
缺少的语句意味着.returnmainreturns 0

于 2010-06-18T01:31:52.733 回答