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