MethodBodyBlock 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示 ECMA 335 程序集中的方法主体。
public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
- 继承
-
MethodBodyBlock
示例
此示例演示如何读取指定类型定义中所有方法的方法主体并显示方法正文信息:
static void PrintMethods(PEReader reader, MetadataReader mr, TypeDefinition tdef)
{
MethodDefinitionHandleCollection methods = tdef.GetMethods();
foreach (MethodDefinitionHandle mdefh in methods)
{
MethodDefinition mdef = mr.GetMethodDefinition(mdefh);
string mname = mr.GetString(mdef.Name);
Console.WriteLine($"Method: {mname}");
// Get the relative address of the method body in the executable
int rva = mdef.RelativeVirtualAddress;
if (rva == 0)
{
Console.WriteLine("Method body not found");
Console.WriteLine();
continue;
}
// Get method body information
MethodBodyBlock mb = reader.GetMethodBody(rva);
Console.WriteLine($" Maximum stack size: {mb.MaxStack}");
Console.WriteLine($" Local variables initialized: {mb.LocalVariablesInitialized}");
byte[]? il = mb.GetILBytes();
Console.WriteLine($" Method body size: {il?.Length ?? 0}");
Console.WriteLine($" Exception regions: {mb.ExceptionRegions.Length}");
Console.WriteLine();
foreach (var region in mb.ExceptionRegions)
{
Console.WriteLine(region.Kind.ToString());
Console.WriteLine($" Try block offset: {region.TryOffset}");
Console.WriteLine($" Try block length: {region.TryLength}");
Console.WriteLine($" Handler offset: {region.HandlerOffset}");
Console.WriteLine($" Handler length: {region.HandlerLength}");
Console.WriteLine();
}
}
}
注解
方法正文包含共同中间语言 (CIL) 指令,这些指令构成方法及其局部变量和异常区域的信息。 可以使用 GetMethodBody 方法获取 MethodBodyBlock
指定方法的实例。
CIL 指令和元数据的格式由 ECMA-335 规范定义。 有关详细信息,请参阅 Ecma 国际网站上的标准 ECMA-335 - 公共语言基础结构 (CLI) 。
属性
ExceptionRegions |
获取此方法正文中异常区域的数组。 |
LocalSignature |
获取局部变量签名的句柄。 |
LocalVariablesInitialized |
获取一个值,该值指示此方法中的局部变量是否初始化为其类型的默认值。 |
MaxStack |
获取此方法的计算堆栈上的最大项数。 |
Size |
获取方法主体的大小,包括标头、IL 和异常区域。 |
方法
Create(BlobReader) |
使用指定的 Blob 读取器创建 类的新实例 MethodBodyBlock 。 |
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
GetHashCode() |
作为默认哈希函数。 (继承自 Object) |
GetILBytes() |
获取此方法主体的 IL 字节代码作为字节数组。 |
GetILContent() |
获取此方法主体的 IL 字节码作为不可变数组。 |
GetILReader() |
获取读取此方法正文的 IL 字节码的 Blob 读取器。 |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |