Cómo copiar todos los datos en estructuras desde el dominio no confiable hasta el dominio confiable de enclaves Intel® Software Guard Extensions (Intel® SGX)
Desoyé un ecall en el archivo de lenguaje de definición de enclave (EDL) como:
struct pair_t {
uint32_t clave;
uint32_t valor;
};
struct table_t {
pares pair_t struct*;
uint32_t num_pairs;
};
public sgx_status_t ecall_sort_table([in] struct table_t * rel);
La table_t estructura es de 1,1 GB, que es mucho más grande que el EPC de 128 MB. La memoria utilizada en el enclave es mucho menor que la memoria asignada de la estructura en la aplicación no confiable, y no hay ninguna en el EPC.
La estructura anterior y las definiciones de la función de llamada electrónica resultan en una copia de la estructura. Una copia insostez copia solo las direcciones de puntero, no los datos reales a los que se hacen referencia los punteros. En este caso, la dirección del puntero se copia en el espacio de memoria del enclave en el EPC, o dominio de confianza, pero los datos permanecen en el dominio no confiable. El EPC no está experimentando gran cantidad de datos debido a que la mayoría de los datos permanecen en el dominio no confiable.
A continuación, se muestran las definiciones de estructura y declaraciones que logran una copia insogre y una copia profunda. Para copiar en profundidad los datos de la estructura al EPC, las estructuras en el archivo EDL utilizando la cantidad y el tamaño, que son configuradas por el desarrollador.
struct pair_t {
uint32_t de acceso;
uint32_t valor;
};
Esta declaración de estructura da lugar a una copia de la estructura de pares como una insoste.
struct table_t {
pares pair_t struct*;
uint32_t num_pairs;
};
Esta declaración de estructura da lugar a una copia profunda de la estructura de pares
struct deep_table_t {
[count = 1, tamaño = 12] struct pair_t* pares;
uint32_t num_pairs;
};
trusted {
Esta declaración de función da como resultado una copia de la estructura de rel con texto de rel.
sistema sgx_status_t ecall_sort_table([en] struct table_t * rel);
Esta declaración de función da lugar a una copia profunda de la estructura de rel
sistema sgx_status_t ecall_deep_sort_table público([in, count = 1] struct deep_table_t * rel);
};
Después de esto, verifique enclave_t.c control para ver las funciones de proxy generadas. La función sgx_ecall_deep_sort_table muestra la copia profunda iterativa de la estructura desde la memoria no confiable hasta la memoria confiable.
Consulte la sección Estructuras, enumeraciones y uniones en la Guía de referencia para desarrolladores de Intel® SGX para Linux* para obtener una explicación completa de cómo lograr una copia profunda de los elementos de la estructura en el dominio de confianza.
Nota | La guía de Intel® Software Guard Extensions (Intel® SGX) de referencia para desarrolladores para Linux* más reciente se encuentra en la sección documentación de la versión Intel® Software Guard Extensions Linux*. |
La herramienta edger8 genera automáticamente las funciones proxy que generan datos entre dominios confiables y no confiables antes de que se compile el código. Los parámetros de recuento y tamaño del archivo EDL le dicen a la herramienta edger8 cuánta memoria copiar en las funciones de proxy.