MethodBodyBlock Classe
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Representa o corpo do método no assembly ECMA 335.
public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
- Herança
-
MethodBodyBlock
Este exemplo mostra como ler corpos de método para todos os métodos na definição de tipo especificada e exibir informações do corpo do método:
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();
}
}
}
O corpo do método contém instruções de CIL (Common Intermediate Language) que compõem um método e informações sobre suas variáveis locais e regiões de exceção. Você pode usar o GetMethodBody método para obter uma MethodBodyBlock
instância para o método especificado.
O formato de instruções e metadados CIL é definido pela especificação ECMA-335. Para obter mais informações, consulte Standard ECMA-335 – Common Language Infrastructure (CLI) no site Ecma International.
Exception |
Obtém a matriz de regiões de exceção neste corpo do método. |
Local |
Obtém o identificador para a assinatura de variáveis locais. |
Local |
Obtém um valor que indica se as variáveis locais nesse método são inicializadas para valores padrão de seus tipos. |
Max |
Obtém o número máximo de itens na pilha de avaliação para esse método. |
Size |
Obtém o tamanho do corpo do método, incluindo as regiões de cabeçalho, IL e exceção. |
Create(Blob |
Cria uma nova instância da MethodBodyBlock classe usando o leitor de blob especificado. |
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
Get |
Serve como a função de hash padrão. (Herdado de Object) |
Get |
Obtém o código de bytes IL desse corpo do método como uma matriz de bytes. |
Get |
Obtém o código de bytes IL desse corpo do método como uma matriz imutável. |
Get |
Obtém um leitor de blob que lê o código de bytes IL desse corpo do método. |
Get |
Obtém o Type da instância atual. (Herdado de Object) |
Memberwise |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
To |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
Produto | Versões |
---|---|
.NET | Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8 (package-provided), 8, 9 (package-provided), 9 |
.NET Framework | 4.7 (package-provided), 4.7.1 (package-provided), 4.7.2 (package-provided), 4.8 (package-provided) |
.NET Standard | 2.0 (package-provided) |
UWP | 10.0 |
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários: