2

自修改代码是“在执行时更改自己的指令”的代码。这通常不会在汇编语言或病毒之外完成。

反射只是程序动态访问其自己的命名空间的能力,以便动态引用函数、类和变量。根据这篇文章,反射不仅是自省(程序自我检查的能力),而且是代祷(程序修改自身的能力)。

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

我有这个区别对吗?

4

1 回答 1

3

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

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

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

目标完全不一致。

但是我想他们以一种小的方式相交的一个例子是考虑一个函数(F),它调用另外两个函数 - A 然后 B。您可以反映该知识,然后调用 B 然后调用 A (从而修改 (F) 的用例))。如您所见,它不是在修改代码,而只是在修改预期的用例。

于 2013-12-09T06:14:01.500 回答