自修改代码的使用场景?

5
冯·诺伊曼体系结构中,程序和数据都存储在内存中,因此程序可以修改自身。这对程序员有用吗?你能给一些例子吗?

有没有一个简单的例子,因为这是计算机体系结构课程中的一个问题。请参阅Tanenbaum的《结构化计算机组织》(第1章的问题,并且有一个提示:考虑在数组上进行算术运算)。 - gylns
你不可能指望我们从你的问题中猜出来,对吧?另外,那本书我没有。 - Niklas B.
2个回答

6

变形

我想到的一个(有争议的)用例是变形病毒。这些恶意软件通过将其自己的机器代码重写为语义上等效但外观不同的表示来隐藏自己,从而避免基于签名的检测

跳板技术

另一个(更复杂但也更常见)用例是跳板技术,这是一种基于动态代码生成的技术,用于解决某些嵌套函数调用的问题。

JIT编译

我能想到的最常见的动态代码生成用法是JIT(即时)编译。像.NET或Java这样的现代语言不会编译成本机机器代码,而是编译成某种中间语言(称为字节码)。当程序执行时,该字节码将被解释(由针对目标架构编写的虚拟机执行)。同时,后台进程检查哪些代码部分经常被执行。这些部分有很好的机会被动态编译成本机机器语言以获得最大的性能。所有这些都发生在程序运行时!

安全影响

需要记住的一件事是,将数据解释为代码的可能性可用于利用计算机软件中的安全漏洞,这就是现代硬件和操作系统趋势的原因,即启用并在可能的情况下强制执行代码和数据的分离(也请参见NX位DEP)。


1

LISP 真的不仅仅是关于人工智能。 - Niklas B.
1
尼克拉斯,当然LISP不仅仅涉及AI,但在LISP中自修改代码仍是AI的重要组成部分,在性能不太关键的情况下(尽管这些领域正在缩小)。 - Lee Hambley

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