用例自修改代码?

时间:2012-01-03 14:18:58

标签: self-modifying von-neumann

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

2 个答案:

答案 0 :(得分:4)

<强>变质

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

<强>蹦床

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

JIT编译

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

安全隐患

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

答案 1 :(得分:1)

我可以通过引用一个类似(特别好写和回答)问题的答案来解决这个问题,也可以在StackOverflow上找到答案 - Homoiconic and "unrestricted" self modifying code + Is lisp really self modifying?。答案集中在Lisp上,这是一种将“代码就是数据”提升到新水平的家庭语言,并探讨了它在AI中的用途。