So kopieren Sie alle Daten in Strukturen von der nicht vertrauenswürdigen Domäne in die vertrauenswürdige Domäne der Intel® Software Guard Extensions (Intel® SGX) Enklaven
EDL-Datei (EDL):
Struktur pair_t {
uint32_t-Taste;
uint32_t Wert;
};
Struktur table_t {
Struktur pair_t* Paare;
uint32_t num_pairs;
};
public sgx_status_t ecall_sort_table([in] struct table_t * rel);
Die table_t Struktur beträgt 1,1 GB, was wesentlich größer als das 128-MB-EPC ist. Der in der Enklave verwendete Speicher ist viel geringer als der zugewiesene Speicher der Struktur in der nicht vertrauenswürdigen Anwendung, und im EPC gibt es keine Paging-Speicher.
Die oben genannten Struktur- und Ecall-Funktionsdefinitionen führen zu einer Kopie der Struktur, die sich in unerlaubt abzeichnet. Eine kopierte Kopie kopiert nur die Pointer-Adressen, nicht die tatsächlichen Daten, auf die die Pointer Bezug haben. In diesem Fall wird die Pointer-Adresse in den Speicherbereich der Enklave im EPC oder in die vertrauenswürdige Domäne kopiert, die Daten bleiben jedoch in der nicht vertrauenswürdigen Domäne. Beim EPC tritt kein Paging auf, weil der Großteil der Daten in einer nicht vertrauenswürdigen Domäne liegt.
Nachfolgend sehen Sie Strukturdefinitionen und Deklarationen, die eine kopierernde Kopie und eine tiefe Kopie erzielen. Um die Strukturdaten tief in das EPC zu kopieren, verwenden Sie die Strukturen in der EDL-Datei anhand von Anzahl und Größe, die vom Entwickler festgelegt werden.
Struktur pair_t {
uint32_t-Taste;
uint32_t Wert;
};
Diese Strukturdeklaration führt zu einer kopierten Kopie der Paare-Struktur
Struktur table_t {
Struktur pair_t* Paare;
uint32_t num_pairs;
};
Diese Strukturdeklaration führt zu einer tiefen Kopie der Paare-Struktur
Struktur deep_table_t {
[anzahl = 1, Größe = 12] Struktur pair_t* Paare;
uint32_t num_pairs;
};
Trusted {
Diese Funktionsdeklaration führt zu einer kopierten Kopie der Rel-Struktur
Public sgx_status_t ecall_sort_table ([in] Struktur table_t * rel);
Diese Funktionsdeklaration führt zu einer tiefen Kopie der Rel-Struktur
public sgx_status_t ecall_deep_sort_table([in, count = 1] struct deep_table_t* rel);
};
Überprüfen Sie nach der Kompilierung enclave_t.c, um die generierten Proxyfunktionen zu sehen. Die Funktion, sgx_ecall_deep_sort_table angezeigt wird, zeigt eine tiefe Kopie der Struktur von nicht vertrauenswürdigem Speicher zu vertrauenswürdigem Speicher.
Im Abschnitt Strukturen, Enums und Unions im Intel® SGX Developer Reference Guide für Linux* finden Sie eine ausführliche Erklärung, wie Sie eine tiefe Kopie der Strukturelemente in die vertrauenswürdige Domain erreichen können.
Hinweis | Der neueste Intel® Software Guard Extensions (Intel® SGX) Developer Reference Guide für Linux* finden Sie im Dokumentationsabschnitt der neuesten Intel® Software Guard Extensions Linux Release*. |
Das Edger8 Tool generiert automatisch die Proxyfunktionen, die vor der Kompilierung des Codes Daten zwischen nicht vertrauenswürdigen und vertrauenswürdigen Domänen absichern. Die Anzahl- und Größenparameter in der EDL-Datei geben dem Edger8-Tool an, wie viel Speicher in die Proxyfunktionen kopiert werden muss.