Quel est le but du champ de vecteur de bits triés dans l'en-tête de métadonnées «~» d'un assemblage .NET?

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

  •  06-07-2019
  •  | 
  •  

Question

Selon les métadonnées de Partition II, il est indiqué que le champ valide est un masque binaire qui indique quelles tables de métadonnées CLR sont présentes dans un exécutable .NET - mais je ne peux pas comprendre ce que le "trié" field is for - quelle est sa signification et que dois-je émettre dans ce champ lors de la création de mes propres images exécutables portables .NET?

Était-ce utile?

La solution

Je pense que le champ trié indique simplement si la table de métadonnées spécifique est triée ou non (c'est un champ binaire juste comme valide).

Cela permettrait à une exécution de faire une recherche binaire sur la table directement à partir des données memmapped.

Autres conseils

EDIT: ce n'est pas une réponse, j'ai mal interprété la question comme se rapportant au champ Valide plutôt qu'au champ Trié, mais je la laisse ici au cas où elle serait liée à la réponse

Le " Valid " Le champ dont vous parlez est décrit dans Partition II , §24.2.6, avec la partie pertinente suivante:

  

Le champ Valid est un vecteur de bits de 64 bits pour lequel un bit spécifique est défini pour chaque table stockée dans le flux. le mappage des tables en index est donné au début du §22. Par exemple, lorsque la table DeclSecurity est présente dans les métadonnées logiques, le bit 0x0e doit être défini dans le vecteur valide. Il n'est pas valide d'inclure des tables non existantes dans Valid. Tous les bits supérieurs à 0x2c doivent donc être à zéro.

Chaque sous-section de la section 22 commençant par le §22.2 décrit une table et donne son index de bits. Par exemple, le §22.2 est intitulé "Assemblage: 0x20". Cela signifie que, si et seulement si la table d'assemblage décrite au §22.2 est présente dans votre PE, le bit 0x20 doit être défini dans le champ Valide . Notez que cela NOT signifie que Valide & amp; 0x20 == 0x20 , cela signifie que le bit 0x20 (c'est-à-dire le 32e) de Valid doit être défini, ce qui revient à dire Valid & amp; (1 < < 0x20) == (1 < < 0x20) .

Pendant un certain temps, je ne savais pas s'il était indexé 0 ou 1, alors j'ai supposé être indexé 0. Mais je sais maintenant avec certitude qu’il est indexé sur 0, car la table Module est la table 0x00.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top