Was ist der Zweck des sortierten Bit-Vektor-Feldes in dem „~“ Metadaten-Header in einer .NET-Assembly?

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

  •  06-07-2019
  •  | 
  •  

Frage

Nach der Partition II Metadaten, heißt es, dass das gültige Feld eine Bitmaske, die Noten, die CLR-Metadaten Tabellen in einer .NET ausführbare Datei vorhanden sind - aber was kann ich nicht herausfinden, ist das, was die „sortiert“ -Feld für - was ist seine Bedeutung, und was soll ich in diesen Bereich emittieren, wenn meine eigenen .NET portable Executable Bilder zu schaffen

War es hilfreich?

Lösung

ich denke, das sortierte Feld ist nur anzudeuten, wenn die spezifische Metadaten Tabelle sortiert ist oder nicht (es ist ein Bitfeld wie gültig).

Dies würde eine Implemenation einer Laufzeit ermöglicht eine binäre Suche auf dem Tisch von den memmapped Daten direkt zu tun.

Andere Tipps

EDIT: Dies ist nicht eine Antwort, falsch verstehe ich die Frage über das Gültig Feld zu sein, anstatt das Feld sortiert, aber ich es hier im Fall verlasse es auf die Antwort zusammenzuhängt

Das „Gültig“ -Feld Sie sprechen, ist in der Partition II , §24.2.6, mit dem entsprechenden Teil wie folgt:

  

Das Gültig-Feld ist ein 64-Bit-Bitvektor, der eine bestimmte Bit für jede Tabelle aufweist, die in dem Strom gespeichert ist; die Zuordnung von Tabellen zu Indizes zu Beginn des § 22 gegeben. Zum Beispiel, wenn die DeclSecurity Tabelle in den logischen Metadaten vorhanden ist, Bit 0x0E soll im gültigen Vektor eingestellt werden. Es ist ungültig inexistent Tabellen in Gültig enthalten, so dass alle Bits über 0x2c beträgt Null.

Jeder Unterabschnitt des Abschnitts 22 mit §22.2 Ausgang beschreibt eine Tabelle und gibt seinen Bit-Index. Zum Beispiel §22.2 ist „Assembly: 0x20“ betitelt. Das bedeutet, dass, wenn und nur wenn der in §22.2 beschriebenen Montagetisch in Ihrem PE vorhanden ist, das Bit 0x20 muss im Valid Feld gesetzt werden. Beachten Sie, dass dies tut nicht , dass Valid & 0x20 == 0x20 bedeuten, bedeutet dies, dass die 0x20th (dh der 32.) muss etwas Valid eingestellt werden, was Valid & (1 << 0x20) == (1 << 0x20) zu sagen ist.

Für eine Weile war ich nicht sicher, ob es 0-indiziert war oder 1-indiziert, so dass ich davon ausgegangen 0-indiziert. Aber ich weiß jetzt sicher, dass es 0-indiziert, da die Module Tabelle Tabelle 0x00 ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top