Qual é a finalidade do campo vector bit classificada no “~” Metadados de cabeçalho em um .NET assembly?

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

  •  06-07-2019
  •  | 
  •  

Pergunta

De acordo com os metadados de partição II, que diz que o campo válida é uma máscara de bits que as notas que mesas CLR metadados estão presentes em um .NET executável - mas o que eu não consigo descobrir é o que o "ordenado" campo é para - o que é o seu significado, e o que devo emitir neste campo ao criar meu próprio .NET imagens executáveis ??portáteis

Foi útil?

Solução

Eu acho que o campo classificado é apenas insinuando se a tabela de metadados específicos são classificados ou não (é um campo de bits como válido).

Isso permitiria que um implemenation de um tempo de execução para fazer uma busca binária sobre a mesa diretamente dos dados memmapped.

Outras dicas

EDIT: Esta não é uma resposta, eu descaracterizou a questão como sendo sobre o campo Válido em vez do campo classificado, mas eu estou deixando aqui no caso, está relacionada com a resposta

O campo "válido" você está falando é descrito em Partition II , §24.2.6, com a parte relevante da seguinte forma:

O campo válido é um bitvector de 64 bits que tem um conjunto de bits específica para cada tabela que é armazenada no fluxo; o mapeamento de quadros de índices é dada no início do § 22. Por exemplo, quando a tabela de DeclSecurity está presente nos metadados lógico, pouco 0x0e deve ser definido no vector válido. É inválido para incluir tabelas inexistentes em Válido, então todos os bits acima 0x2c será igual a zero.

Cada subsecção da secção 22, começando com §22.2 descreve uma mesa, e dá o seu índice de bit. Por exemplo, §22.2 é intitulado "Assembly: 0x20". Isto significa que, se e somente se a tabela de montagem descritas no §22.2 está presente no seu PE, então mordeu 0x20 deve ser definido no campo Valid. Note que isto faz não significa que Valid & 0x20 == 0x20, isso significa que o 0x20th (ou seja, a 32) pouco de Valid deve ser conjunto, o que significa dizer Valid & (1 << 0x20) == (1 << 0x20).

Por um tempo eu não tinha certeza se era 0 indexado ou 1-indexados, então eu assumi 0-indexados. Mas agora eu sei com certeza que é 0-indexados, porque a tabela Módulo é a tabela 0x00.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top