Sdílet prostřednictvím


Metadata a struktura přenositelného spustitelného souboru

Metadata jsou uložena v jednom oddíle přenositelného spustitelného souboru (PE) rozhraní .NET Framework, kdežto jazyk MSIL (Microsoft Intermediate Language) je uložen v jiném oddíle přenositelného spustitelného souboru. Část souboru metadat obsahuje řadu tabulek a hald datových struktur. Část souboru s jazykem MSIL obsahuje jazyk MSIL a tokeny metadat, které odkazují na část přenositelného spustitelného souboru s metadaty. Když používáte nástroje, jako je například MSIL Disassembler (Ildasm.exe) pro zobrazení vašeho MSIL kódu, můžete narazit na tokeny metadat.

Tabulky a haldy metadat

Každá tabulka metadat uchovává informace o elementech programu. Například jedna tabulka metadat popisuje třídy v kódu, jiná tabulka popisuje položky a tak dále. Pokud máte ve svém kódu deset tříd, tabulka tříd bude obsahovat deset řádků, jeden pro každou třídu. Tabulky metadat odkazují na jiné tabulky a haldy. Například tabulka metadat pro třídy odkazuje na tabulku pro metody.

Metadata také ukládají informace do čtyř struktur haldy: řetězec, blob, uživatelský řetězec a identifikátor GUID. Všechny řetězce použité k pojmenování typů a členů jsou uloženy v haldě řetězce. Například tabulka metody přímo neukládá název konkrétní metody, ale odkazuje na název metody, který je uložený v haldě řetězce.

Tokeny metadat

Každý řádek každé tabulky metadat je jednoznačně identifikovaný v části přenositelného spustitelného souboru pro jazyk MSIL pomocí tokenu metadat. Tokeny metadat jsou koncepčně podobné ukazatelům uloženým v MSIL, které odkazují na konkrétní tabulku metadat.

Token metadat je čtyř bajtové číslo. Horní byte označuje tabulku metadat, na kterou konkrétní token odkazuje (metoda, typ atd.). Zbývající tři bajty specifikují řádek v tabulce metadat, který odpovídá popisovanému programovacímu prvku. Pokud definujete metodu v jazyce C# a kompilujte ji do přenositelného spustitelného souboru, tak následující token metadat může existovat v části přenositelného spustitelného souboru pro jazyk MSIL:

 0x06000004

Horní byte (0x06) označuje, že tohle je MethodDef token. Nižší tři bajty (000004) sdělují modulu CLR (Common Language Runtime), aby se podíval do čtvrtého řádku tabulky MethodDef pro informaci, která popisuje definici této metody.

Metadata uvnitř přenositelného spustitelného souboru

Když je program kompilován pro modul CLR (Common Language Runtime), je převeden na přenositelný spustitelný soubor, který se skládá ze tří částí. Následující tabulka popisuje obsah každé části.

PE oddíl

Obsah PE oddílu

PE hlavička

Index hlavních částí přenositelných spustitelných souborů (PE) a adresa vstupního bodu.

Runtime modul používá tyto informace pro identifikaci souboru jako přenositelného spustitelného souboru a k určení, kde začít provádění při načítání programu do paměti.

Instrukce jazyka MSIL

Instrukce jazyka MSIL (Microsoft Intermediate Language), které tvoří váš kód. Mnoho MSIL instrukcí je doprovázeno tokeny metadat.

Metadata

Tabulky a haldy metadat. Modul runtime používá tento oddíl k zaznamenání informací o každém typu a členu ve vašem kódu. Tato část také obsahuje vlastní atributy a informace o zabezpečení.

Viz také

Další zdroje

Metadata a komponenty popisující samy sebe