次の方法で共有


MethodBodyBlock クラス

定義

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 International Web サイトの 「Standard 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)

適用対象