实际上,它与逆向工程直接相反。
正确地,“逆向工程”是查看过程的结果,然后向后工作,以确定它是如何到达那里的。通常,它在不了解原始代码的情况下完成,并且通常产生非常不同的过程。
尽管版权所有者受到了可怕的威胁,但这完全合法。
“反汇编”(又名“反射”)就是在硬盘上读取字节并为其分配含义的操作。这正是CPU运行代码时所做的事情。在这里,我们只是让人类可读。尽管版权所有者受到了可怕的威胁,但它仍然完全合法。
以避免版权所有者从其工作中获利的方式出售他人的代码(或自己使用), 是 非法,但我们在这里不是在谈论这个问题。
反射是一种可用于许多事物的工具,包括代码的逆向工程。反射也可用于许多其他目的,例如通过反射实现动态语言更容易。
逆向工程本身也不足以反思。您可以通过这种方式查找有关程序结构的信息,但仍需要对代码进行反编译。像反射器这样的工具会添加此功能。
两者之间的边界确实模糊不清。从道德上讲,我会在程序员的动机中划清界限。
如果他使用反射来构建一个库,工具或类似的软件,它应该与满足某些标准的任何第三方代码进行交互,我不认为它是逆向工程。
例如,我最近为Linq2SQL数据层编写了一个通用基类。基类使用反射来深入了解数据库布局并正确处理嵌套业务实体的更新。如果其他人将我的基类用于他的Web应用程序,我将无法获得有关其源代码的任何知识。这种反射的使用当然不是逆向工程。
另一方面,如果程序员试图通过反射来理解竞争对手软件的内部运作,那么他就是对它进行逆向工程。
人们必须质疑其定义 逆向工程 当容易反编译语言的能力是语言ala Reflection的一部分时。
用像这样的工具 .NET Reflector 我觉得线条真的开始变得模糊!
他们最近使用SO本身的一个例子 对源代码进行去模糊处理 为他们的WMD编辑。我认为这比反射更能定义逆向工程。
反射只是一种从装配中读取信息的工具,因此它本身不是逆向工程。
然后,如果您使用此信息来了解如何创建程序集,例如使用.NET反射器生成可生成相同IL代码的可读源代码,那就是逆向工程。
必须向律师提出法律问题。律师收钱。如果因不请律师而被起诉,不雇用律师可能会花费更多的钱。
最好的选择:不需要问。微软已经发布了很多.NET的源代码。看到 http://www.microsoft.com/resources/sharedsource/default.mspx 。
.NET和Java等许多语言的反射都是针对不良语法的补丁,它们不允许您与对象自由交互。
在像Smalltak或Self这样的真正面向对象的语言中,你几乎不需要反射,如果需要,它也是如此 的 到目前为止 强> 比.NET和Java提供的功能更强大。
话虽如此,我确实认为反思是逆向工程,考虑到RE更像是理解代码来做某事而不是破坏其他人的保护。
我目前正在使用Drupal(基于PHP)工作很多,它使用丑陋的东西,比如将模块的名称连接到预定义的钩子名称来查找该函数是否存在,因此可以稍后调用它(例如module_hook_name)。
它非常方便,但我相信真正的OO语言可以通过对可以回答任何消息的抽象类进行子类化来避免,而子类可以覆盖它。
除极端情况外,不应使用反射,在这种情况下,您可以看到编程语言的缺陷。
反射 是一个通用的计算机科学术语,在引入Microsoft .Net框架(比SUN JVM)之前几十年就已经使用了。这个想法是 的 不 强> 旨在逆向工程应用。在特定情况下,它可用于此目的只是偶然的。正如其他人所写,反思是一种“工具”。
我会说反思只是一种工具。反射的使用并不一定意味着逆向工程。
例如,如果使用反射来发现程序集中所有公共和受保护方法的签名,而这些签名并不意味着逆向工程。
至于法律观点,我建议你必须看看你担心的法律,找到逆向工程的定义。
我想你在谈论两件不同的事情:
从法律角度来看,如果您将反射用于逆向工程,则取决于您的目标。
当然是IANAL,但我认为逆向工程本身并不违法。它可能成为一种非法活动 通过代理 ,即通过侵犯版权等。
不。通过反射,您通常只是在讨论调用方法的不同方式,或者可能只是查看方法属性。
相比之下,我希望逆向工程的产品能够生成源代码,我可以通过它来理解作者的算法和思想,这通常是他们试图保护的。
这一切都取决于你反思的程度。如果你使用像这样的工具 反光 或者自己编写类似的东西,那么这将是逆向工程,因为你实际上是在获取源代码。
反射可用于调用方法或查看属性,如Don所说,但它也可用于分析程序集的结构,甚至可以查看底层的MSIL代码。因此,反射的一种用途可能是无辜的,一种是逆向工程。