Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
自修改代码是“在执行时更改自己的指令”的代码。这通常不会在汇编语言或病毒之外完成。
反射只是程序动态访问其自己的命名空间的能力,以便动态引用函数、类和变量。根据这篇文章,反射不仅是自省(程序自我检查的能力),而且是代祷(程序修改自身的能力)。
那么,反射是指一种温和形式的自修改代码,其中只有变量/类/函数名称在指令中被“修改”吗?也就是说,与在自修改代码中修改整个指令本身的性质的能力相比,反射是一种更温和、更不“戏剧性”的修改形式。
我有这个区别对吗?
不,一个是关于在执行期间更改代码。另一个关于在执行期间读取代码的结构和元数据(自省)。
它们可以是相互排斥的。您不需要知道代码是如何修改它的(如果操作系统允许您这样做)。
通常,您可以使用反射以非“正常用例”方式执行代码,但它仍然是相同的代码。将此与修改代码进行对比。
目标完全不一致。
但是我想他们以一种小的方式相交的一个例子是考虑一个函数(F),它调用另外两个函数 - A 然后 B。您可以反映该知识,然后调用 B 然后调用 A (从而修改 (F) 的用例))。如您所见,它不是在修改代码,而只是在修改预期的用例。