我从John Robbins blog知道.NET PDB
文件包含源文件名,行号和局部变量名。但是像ILSpy
或.Net Reflector
这样的反向工程软件仍然可以弄清楚大部分代码。
代码流更容易获得。但是这些软件如何提取函数名称,变量名称之类的数据?
答案 0 :(得分:3)
代码流更容易获得。但是这些软件如何提取函数名称,变量名称之类的数据?
程序集在元数据中包含此类信息。如spec中所述,
新类型(值类型和引用类型)通过元数据中表示的类型声明被引入CTS(通用类型系统)。此外,元数据是一种结构化的方式,用于表示CLI(通用语言基础结构)用于定位和加载类,在内存中布置实例,解析方法调用,将CIL(通用中间语言)转换为本地代码,增强安全性的所有信息。 ,并设置运行时上下文边界。
此外,请务必注意,这些信息不仅可以通过这些“逆向工程”工具访问,还可以通过Reflection来访问C#(或VB)代码。例如,通过反射可以知道给定类型的方法名称,因为它是元数据的一部分。
以下是.Net Guide的摘录,其中解释了元数据中包含的内容:
元数据在代码中描述代码中定义的每种类型和成员。 语言中立的方式。元数据存储以下信息:
程序集的描述。
身份(名称,版本,文化,公钥)。
导出的类型。
此程序集依赖的其他程序集。
运行所需的安全权限。
类型说明。
实现的名称,可见性,基类和接口。
成员(方法,字段,属性,事件,嵌套类型)。
属性。
- 修改类型和成员的其他描述性元素。
现在不一定包含局部变量名称,此类工具通常不会正确地对它们进行反向工程。