リコード済みドメインからトラステッド・ドメインの構造体内のすべてのデータをエンクレイブ (インテル® Software Guard Extensions) エンクレイブインテル® SGXする方法
Enclave Definition Language (EDL) ファイルの宣言形式:
構造体pair_t {
uint32_tキー;
uint32_t値;
};
構造体table_t {
struct pair_t* ペア。
uint32_t num_pairs;
};
public sgx_status_t ecall_sort_table([in] struct table_t * rel);
最大 table_t は 1.1 GB で、128 MB の EPC よりもはるかに大きくなります。エンclave で使用されるメモリーは、指定されたアプリケーションで構造体に割り当てられたメモリーよりはるかに少なく、EPC にページはありません。
上記の構造と関数の定義は、構造のコピーになります。変更コピーは、ポインターが参照した実際のデータではなく、ポインターのアドレスのみをコピーします。この場合、ポインター・アドレスは EPC またはトラステッド・ドメイン内のエンclave のメモリースペースにコピーされますが、データは破損したドメイン内に残ります。大部分のデータがドメイン内に残っているため、EPC ではページが発生していないので、
以下は、コピーとディープコピーを実現する構造の定義と宣言です。構造データを EPC にディープコピーするには、開発者が設定した数とサイズを使用して EDL ファイル内の構造を変更します。
構造体のpair_t {
uint32_tキー;
uint32_t値。
};
この構造宣言により、ペア構造のコピーが作成されます。
構造体table_t {
struct pair_t* ペア。
uint32_t num_pairs;
};
この構造宣言により、ペア構造のディープコピーが生成されます。
構造体deep_table_t {
[count = 1、size = 12] struct pair_t* ペア;
uint32_t num_pairs;
};
トラステッド {
この機能宣言により、rel 構造のコピーが作成されます。
public sgx_status_t ecall_sort_table ([in] struct table_t * rel);
この関数宣言により、rel 構造のディープコピーが作成されます。
public sgx_status_t ecall_deep_sort_table ([in, count = 1] 構造体deep_table_t * rel);
};
その後で、生成enclave_t.c機能を確認します。この機能はsgx_ecall_deep_sort_tableされたメモリーからトラステッド・メモリーまで、構造の深いコピーを示します。
トラステッド・ドメインに構造体エレメントのディープ・コピーを作成する方法の詳細については、Linux*インテル® SGX 開発者向けリファレンス・ガイド の「構造体、共用体」セクションを参照してください。
メモ | Linux* 用最新インテル® Software Guard Extensions (インテル® SGX) 開発者リファレンス・ガイドは、Linux* の最新バージョン インテル® Software Guard Extensionsセクションに含まれています。 |
edger8 ツールは、コードがコンパイルされる前に、削除済みドメインと信頼済みドメイン間でデータをマーシャリングするプロキシー機能を自動的に生成します。EDLファイルの数とサイズのパラメーターは、edger8 ツールにプロキシー機能にコピーするメモリー容量を指定します。