我是否有可能编写破坏编译器的代码?是否意味着不良的编程实践会导致我最终可能会损害编译器并且我假设我编写的代码不是某种专门设计用于执行此操作的病毒?
3 回答
一般来说,编译器由静态代码组成。每次运行程序时,静态代码都会从头开始重新运行。因此,只要您无权访问它,就无法破坏编译器。
有一些编程语言可以让您使用编译器进行扩展。但是即使您可以扩展语言,编译器也可能会在每次运行时重新启动。此外,您不太可能以这种方式触发任何有害的事情。
存在编译器错误,它们可能会被触发。但通常这只会导致构建失败。
现在,如果您有一个Makefile
,您可以更改用户有权访问的任何内容。因此,构建应用程序可能会引发不必要的副作用。安装脚本当然最有可能影响系统,因为它们通常以提升的权限运行。
不。至少不是偶然的(当你提到“糟糕的编程实践”时,我假设你在谈论这个)
通常,无论您做什么都不会影响编译器二进制文件,因此即使您设法破坏内存,当编译器重新启动时,它也会完全“修复”。
这条规则的一个主要例外是,如果您真的更改了编译器二进制文件(例如,使用文件 I/O API 来重写可执行文件),但众所周知,这是很难做到的。
破坏编译器并不是那么容易。您可能必须在编译器中找到一个安全漏洞,然后利用它来更改结果。很难偶然做到,结果更难得到一个工作的可执行文件。
如果有人想强制编译器生成病毒,有更简单的方法可以做到这一点:
- 实际编写病毒代码并正常编译它。在这种情况下,编译器完全按照应有的方式工作,因为病毒源代码已正确转换为病毒二进制文件。
- 有意直接更改编译器二进制文件。
如果您担心从 Internet 下载代码并编译它可能会导致病毒,那么这种担心可能是有道理的。然而,正如我之前提到的,与产生/传播病毒的替代方法相比,正确利用编译器非常困难。无论哪种方式,出于实际目的,检查源代码应该足以消除这种担忧。
不,这是不可能的,除非编译器中有一个非常奇怪且不太可能由此类代码触发的错误。