c++ - 源代码如何包含与语言无关的 "a hidden message"并且仍然可以编译?

标签 c++ assembly language-agnostic

<分区>

this question on programmers 提醒了我Nimda 病毒字面意思是“Concept Virus(CV) V.5, Copyright(C)2001 R.P.China”。内置于它的代码中。这怎么可能?它不会导致编译时错误,或者至少会因为它什么都不做而被优化掉吗?这是在病毒的反汇编版本中看到的吗?

最佳答案

这取决于病毒是如何开发的,但作为一个例子,在汇编中,这是:

UnusedString DB 'Concept Virus(CV) V.5, Copyright(C)2001 R.P.China.', 0

将字符串(以空字符结尾)嵌入到目标代码和可执行文件中。代码是否实际引用 UnusedString 对大多数汇编器来说毫无意义(以我的经验)。

Visual C++ 将删除“未使用的局部变量”作为其死代码优化的一部分。但是,如果您为变量赋值,但不使用它,Visual C++ 不会将其视为“未使用”,并将其留在应用程序中。所以……

char UnusedString[] = "Concept Virus(CV) V.5, Copyright(C)2001 R.P.China.";

还会在应用程序中产生相同的以 null 结尾的字符串,但实际上并未使用该字符串。

然后是 .exe 或 .dll 文件的 header ,其中可以包含大量内容。例如,查看 Microsoft 提供的可执行文件的属性对话框。

关于c++ - 源代码如何包含与语言无关的 "a hidden message"并且仍然可以编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23503162/

相关文章:

language-agnostic - 给我画彩虹

c++ - python 字符串使用特殊字符发送到 c++ dll,崩溃

c++ - 我应该在服务器端做什么,以便从 crashpad 库中收集小型转储?

C 到 NASM 转换

c++ - FPU,SSE 单 float 。哪个更快?低于或高于

language-agnostic - webapp 开放测试版与封闭测试版的任何好处/缺点

algorithm - 如何对任意长度的数字进行平方根和幂运算?

c++ - 检测引用计数对象中的内存泄漏

c++ - 如何在 Visual Studio 的 C/C++ 项目中遵循#include 语句

c - mmap2函数用asm编写,用c调用