Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Überblick
Eine neu zugeordnete Struktur oder Klasse, die durch ein Mitglied initialisiert wird, kann Informationen enthalten, wenn sie Abstandsbytes enthält.
Empfehlung
Stellen Sie sicher, dass alle Abstandsbytes in der Struktur oder Klasse initialisiert werden.
Verwenden Sie memset , wenn möglich, um die gesamte Struktur/Klasse zu initialisieren.
Beispiel
Das folgende Beispiel zeigt ein Szenario, in dem der Abstand zwischen den ersten und zweiten Elementen nicht initialisiert wird:
typedef enum { Unknown = 0, Known = 1, Other = 2 } MyStructType;
struct MyStruct { MyStructType type; UINT64 id; };
MyStruct testReturn()
{
// BAD: Padding between the first and second elements not initialized.
MyStruct myBadStackStruct = { Unknown };
return myBadStackStruct;
}
Um dies zu korrigieren, initialisieren wir alle Bytes mit Memset:
typedef enum { Unknown = 0, Known = 1, Other = 2 } MyStructType;
struct MyStruct { MyStructType type; UINT64 id; };
MyStruct testReturn()
{
// GOOD: All padding bytes initialized
MyStruct* myGoodHeapStruct = (struct MyStruct*)malloc(sizeof(struct MyStruct));
memset(myGoodHeapStruct, 0, sizeof(struct MyStruct));
return *myGoodHeapStruct;
}
Zusätzliche Details
Diese Abfrage finden Sie im Microsoft GitHub CodeQL-Repository. Details dazu, wie Windows-Treiberentwickler CodeQL herunterladen und ausführen können, finden Sie auf der Seite " CodeQL" und auf der Seite "Logotest für statische Tools ".