Qual è lo scopo del campo vettore bit ordinato nell'intestazione "~" dei metadati in un assembly .NET?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Secondo i metadati della Partizione II, dice che il campo valido è una maschera di bit che rileva quali tabelle di metadati CLR sono presenti in un eseguibile .NET - ma ciò che non riesco a capire è ciò che il "quotato" " campo è per - qual è il suo significato e cosa devo emettere in questo campo quando creo le mie immagini eseguibili portatili .NET?

È stato utile?

Soluzione

Penso che il campo ordinato stia solo suggerendo se la tabella dei metadati specifica è ordinata o meno (è un campo di bit proprio come valido).

Ciò consentirebbe a un'implementazione di un runtime di eseguire una ricerca binaria sulla tabella direttamente dai dati memmapped.

Altri suggerimenti

MODIFICA: questa non è una risposta, ho letto male la domanda sul campo valido piuttosto che sul campo ordinato, ma la lascio qui nel caso in cui sia correlata alla risposta

Il " valido " campo di cui stai parlando è descritto in Partition II , & # 167; 24.2.6, con la parte pertinente come segue:

  

Il campo valido è un bitvector a 64 bit con un bit specifico impostato per ogni tabella memorizzata nel flusso; la mappatura delle tabelle agli indici è data all'inizio di & # 167; 22. Ad esempio, quando la tabella DeclSecurity è presente nei metadati logici, il bit 0x0e deve essere impostato nel vettore valido. Non è valido includere tabelle inesistenti in Valido, quindi tutti i bit sopra 0x2c devono essere zero.

Ogni sottosezione della sezione 22 che inizia con & # 167; 22.2 descrive una tabella e fornisce il suo indice di bit. Ad esempio, & # 167; 22.2 è intitolato " Assembly: 0x20 " ;. Ciò significa che, se e solo se la tua tabella Assembly descritta in & # 167; 22.2 è presente nel tuo PE, allora il bit 0x20 deve essere impostato nel campo Valido . Nota che questo NON significa che valido & amp; 0x20 == 0x20 , significa che deve essere impostato il bit 0x20th (ovvero il 32 °) di valido , vale a dire valido & amp; (1 < < 0x20) == (1 < < 0x20) .

Per un po 'non ero sicuro che fosse 0-indicizzato o 1-indicizzato, quindi ho assunto 0-indicizzato. Ma ora so per certo che è 0-indexed, perché la tabella Module è la tabella 0x00.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top