“〜”のソートされたビットベクトルフィールドの目的は何ですか? .NETアセンブリのメタデータヘッダー?

StackOverflow https://stackoverflow.com/questions/1619614

  •  06-07-2019
  •  | 
  •  

質問

Partition IIメタデータによると、有効なフィールドは.NET実行可能ファイルに存在するCLRメタデータテーブルを示すビットマスクであると言いますが、私が理解できないのは「ソート済み」のものですフィールドの目的は何ですか?その意味は何ですか?また、独自の.NETポータブル実行可能イメージを作成するときにこのフィールドに何を出力する必要がありますか?

役に立ちましたか?

解決

特定のメタデータテーブルが並べ替えられているかどうかにかかわらず、並べ替えられたフィールドはヒントになっていると思います(有効なビットフィールドです)。

これにより、ランタイムの実装により、マップされたデータから直接テーブルでバイナリ検索を実行できます。

他のヒント

編集:これは回答ではなく、ソートされたフィールドではなく有効なフィールドに関する質問と誤解していますが、回答に関連する場合はここに残します

"有効な"あなたが話しているフィールドは、パーティションII 、§ 24.2.6、関連する部分は次のとおりです。

  

有効なフィールドは、ストリームに格納されている各テーブルに特定のビットが設定された64ビットのビットベクトルです。テーブルのインデックスへのマッピングは§ 22の開始時に指定されます。たとえば、論理メタデータにDeclSecurityテーブルが存在する場合、有効なベクトルにビット0x0eを設定する必要があります。 Validに存在しないテーブルを含めることは無効であるため、0x2cより上のすべてのビットはゼロでなければなりません。

§ 22.2で始まるセクション22の各サブセクションでは、1つのテーブルについて説明し、ビットインデックスを示します。たとえば、§ 22.2は「Assembly:0x20」というタイトルです。つまり、§ 22.2で説明されているアセンブリテーブルがPEに存在する場合にのみ、 Valid フィールドにビット0x20を設定する必要があります。これは、有効な& 0x20 == 0x20 、つまり、 Valid の0x20番目(つまり32番目)のビットを設定する必要があることを意味します。つまり、 Valid& (1<< 0x20)==(1<< 0x20)

しばらくの間、0インデックス付きか1インデックス付きかはわかりませんでしたので、0インデックス付きと想定しました。しかし、Moduleテーブルはテーブル0x00であるため、インデックスが0であることは確実にわかりました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top