我从John Robbins blog中知道,.NET PDB
文件包含源文件名、行号和局部变量名,但像ILSpy
或.Net Reflector
这样的逆向工程软件仍然可以找出大部分代码。
代码流更容易获得。但这些软件如何提取数据,如函数名,变量名?
我从John Robbins blog中知道,.NET PDB
文件包含源文件名、行号和局部变量名,但像ILSpy
或.Net Reflector
这样的逆向工程软件仍然可以找出大部分代码。
代码流更容易获得。但这些软件如何提取数据,如函数名,变量名?
1条答案
按热度按时间2ul0zpep1#
代码流更容易获得。但这些软件如何提取数据,如函数名,变量名?
程序集在元数据中包含此类信息。
CTS中引入了新的类型-值类型和引用类型(公共类型系统)通过类型声明以元数据表示。此外,元数据是一种结构化的方式来表示CLI(公共语言基础结构)用于定位和加载类、在内存中布置示例、解析方法调用、转换CIL(公共中间语言)转换为本机代码、实施安全性以及设置运行时上下文边界。
此外,重要的是要注意,这些信息不仅可以通过这些“逆向工程”工具访问,而且可以通过Reflection访问C#(或VB)代码。例如,通过反射可以知道给定类型的方法的名称,因为它是元数据的一部分。
以下是.Net Guide的摘录,解释了元数据中包含的内容:
元数据以非特定语言的方式描述代码中定义的每个类型和成员。元数据存储以下信息:
这并不一定包括局部变量名,这些工具通常不能正确地对局部变量名进行反向工程。