【问题标题】:Use cases for self-modifying code?自修改代码的用例?
【发布时间】:2012-02-01 13:45:06
【问题描述】:

Von Neumann architecture 上,程序和数据都存储在内存中,因此程序可以自行修改。这对程序员有用吗?可以举一些例子吗?

【问题讨论】:

  • 有没有简单的例子,因为这是计算机体系结构课程中的一个问题。请参阅 Tanenbaum 的《结构化计算机组织》一书(第 1 章的问题,有一个提示:考虑对数组进行算术运算)
  • 您不可能期望我们从您的问题中猜到这一点,对吧?另外,我不拥有那本书。

标签: self-modifying von-neumann


【解决方案1】:

变质

我想到的一个(有问题的)用例是metamorphic computer viruses。这些恶意软件通过将自己的机器代码重写为看起来不同的语义等效表示来隐藏signature based detection

蹦床

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

JIT 编译

我能想到的最常见的动态代码生成用法是JIT (just-in-time) compilation。 .NET 或 Java 等现代语言不会编译成本机机器代码,而是编译成某种中间语言(称为字节码)。然后在执行程序时(由为目标架构编写的虚拟机)解释此字节码。同时,后台进程会检查代码的哪些部分经常执行。然后这些部分很有可能被动态编译成本地机器语言以获得最佳性能。这一切都发生在程序运行期间!

安全隐患

要记住的一点是,将数据解释为代码的可能性对于利用计算机软件中的安全漏洞很有用,这就是为什么现代硬件和操作系统的趋势是启用并在可能的情况下甚至强制执行代码和数据的分离(另见NX bitDEP)。

【讨论】:

    【解决方案2】:

    我可以通过向您推荐一个类似(写得非常好并且回答得很好)的问题的答案来最好地回答这个问题,也在 StackOverflow 上 - Homoiconic and "unrestricted" self modifying code + Is lisp really self modifying?。答案集中在 Lisp,这是一种以将“代码即数据”提升到新水平而闻名的家族语言,并探讨了它在 AI 中的用途。

    【讨论】:

    • LISP真的不仅仅是关于人工智能。
    • Niklas,自然 LISP 的意义远不止 AI,但自修改代码,在 LISP 中仍然是 AI 的很大一部分,在性能不太关键的情况下(尽管这些领域正在缩小)
    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2014-02-06
    • 2013-06-29
    • 2023-04-05
    • 2015-09-15
    相关资源
    最近更新 更多