自修改代码和反射有什么区别?

时间:2013-12-09 06:10:19

标签: reflection computer-science self-modifying

Self-modifying code是“在执行时改变自己的指令”的代码。这通常不是在汇编语言或病毒之外完成的。

Reflection只是程序动态访问自己的命名空间的能力,以便动态地引用函数和类和变量。根据这个article,反思不仅仅是内省(一个程序检查自身的能力),而是代祷(一个程序修改自身的能力)。

那么,反射是指一种温和形式的自修改代码,其中只有变量/类/函数名称在指令中被“修改”?也就是说,与在自修改代码中修改整个指令本身的性质相比,反射是一种更温和,更少“戏剧性”的修改形式。

我有这种区别吗?

1 个答案:

答案 0 :(得分:2)

不,一个是关于在执行期间更改代码。另一个是关于在执行期间读取代码的结构和元数据(内省)。

它们可以互相排斥。您不需要知道代码是如何修改它的(如果操作系统允许的话)。

通常,您可以使用反射以非“正常用例”方式执行代码,但它仍然是相同的代码。与此相反,修改代码。

目标完全不一致。

然而,我想他们以一种小方式相交的一个例子是考虑一个调用另外两个函数的函数(F) - 然后是B.你可以反映这些知识,然后调用B然后调用A(从而修改用例(F))。正如你所看到的那样,它不是修改代码,而只是修改用例。