如果没有PDB文件,C#反编译器如何工作?

问题描述 投票:2回答:1

我从John Robbins blog知道.NET PDB文件包含源文件名,行号和本地变量名。但像ILSpy.Net Reflector这样的逆向工程软件仍然能够找出大部分代码。

代码流更容易获得。但是这些软件如何提取函数名称,变量名等数据呢?

c# .net security reverse-engineering pdb
1个回答
3
投票

代码流更容易获得。但是这些软件如何提取函数名称,变量名等数据呢?

程序集在元数据中包含此类信息。如spec所述,

新类型 - 值类型和引用类型 - 通过元数据中表示的类型声明引入CTS(公共类型系统)。此外,元数据是一种结构化方式,用于表示CLI(公共语言基础结构)用于定位和加载类,在内存中布置实例,解析方法调用,将CIL(通用中间语言)转换为本机代码,强制执行安全性的所有信息,并设置运行时上下文边界。

此外,重要的是要注意,这些信息不仅可以通过这些“逆向工程”工具访问,还可以通过Reflection访问您的C#(或VB)代码。例如,通过反射可以知道给定类型的方法的名称,因为它是元数据的一部分。

以下是.Net Guide的摘录,其中解释了元数据中包含的内容:

元数据以与语言无关的方式描述代码中定义的每个类型和成员。元数据存储以下信息:

  • 装配说明。 身份(名称,版本,文化,公钥)。 导出的类型。 此组件所依赖的其他组件。 运行所需的安全权限。
  • 类型描述。 实现的名称,可见性,基类和接口。 成员(方法,字段,属性,事件,嵌套类型)。
  • 属性。 修改类型和成员的其他描述性元素。

现在,这不一定包括局部变量名称,这些名称通常不会被这些工具正确地进行逆向工程。

© www.soinside.com 2019 - 2024. All rights reserved.