Os metadados e a estrutura de arquivos PE
Os metadados são armazenadas em uma seção de um arquivo executável portável (PE) do .NET Framework, enquanto que a Microsoft Intermediate Language (MSIL) é armazenada em outra seção do arquivo PE.A parte de metadados do arquivo contém uma série de tabelas e estruturas de dados heap.A parte MSIL contém símbolos MSIL e de metadados que fazem referência a parte de metadados do arquivo PE.Você pode encontrar símbolos de metadados ao usar ferramentas como o Desassemblador do MSIL (Ildasm.exe) para exibir o MSIL do seu código ou o Depurador do Ambiente de Execução (Cordbg.exe) para executar um despejo de memória.
Tabelas e Heaps de Metadados
Cada tabela de metadados contém informações sobre os elementos do seu programa.Por exemplo, uma tabela de metadados descreve as classes em seu código, outra descreve os campos, e assim por diante.Se existirem dez classes em seu código, a tabela de classes terá dez linhas, uma para cada classe.Tabelas de metadados referenciam outras tabelas e heaps.Por exemplo, a tabela de metadados de classes faz referência a tabela de métodos.
Metadados também armazenam informações em quatro estruturas de heap: String, blob, cadeia de caracteres do usuário e GUID.Todas as strings usadas para nomear tipos e membros são armazenadas no heap de strings.Por exemplo, uma tabela de métodos não armazena diretamente o nome de um método específico, mas aponta para nome do método armazenado no heap de strings.
Símbolos de Metadados
Cada linha de cada tabela de metadados é unicamente identificada na parte MSIL do arquivo PE por um símbolo de metadados.Símbolos de metadados são conceitualmente semelhantes a ponteiros, persistentes na MSIL, e referenciam uma tabela de metadados específica.
Um símbolo de metadados é um número de quatro bytes.O byte superior denota a tabela de metadados, a qual se refere um token específico (método, tipo, e assim por diante).Os três bytes restantes especificam a linha na tabela de metadados que corresponde ao elemento de programação sendo descrito.Se você definir um método em C# e compilá-lo em um arquivo PE, o seguinte símbolo de metadados pode ser gerado na parte MSIL do arquivo PE:
0x06000004
O byte superior (0x06) indica que esse é um token MethodDef.Os três bytes inferiores (000004) avisam ao Common Language Runtime para procurar na quarta linha da tabela (excluir -> ) MethodDef pelas informações que descrevem essa definição de método.
Metadados em um arquivo PE
Quando um programa é compilado para o Common Language Runtime, ele é convertido em um arquivo PE que consiste de três partes.A tabela a seguir descreve o conteúdo de cada parte.
Seção do arquivo PE |
Conteúdo da seção |
---|---|
Cabeçalho |
O índice das seções principais do arquivo PE e o endereço do ponto de entrada. O ambiente de execução usa essas informações para identificar o arquivo como um arquivo PE e para determinar onde se iniciada a execução ao carregar o programa na memória. |
Instruções da MSIL |
As instruções da Microsoft Intermediate Language (MSIL) que compõem o seu código.Muitas instruções da MSIL são acompanhadas de símbolos de metadados. |
Metadados |
Tabelas e heaps de metadados.O ambiente de execução usa essa seção para registrar as informações sobre cada tipo e cada membro em seu código.Essa seção também inclui atributos personalizados e informações de segurança. |