前回の記事でIntel SGXの導入について述べたので,ここではどうやってHelloWorldするかを述べます.
下準備
Sample Enclaveアプリケーションは次の2種類にわけることができます.基本的にはAppがEnclaveの関数を叩く形になります.
- App: メインのアプリケーション
- Enclave: Enclave用のプログラム
edlはヘッダーだと思ってもらえると都合がいいと思います.
Let's helloworld
ここでは,自作の特に何もしないhelloworld()という関数を定義してみましょう.
まずTrusted Library/配下にMycode.cppとMycode.edlを生成します.ファイルを生成したら,Visual Studioにドラッグ&ドロップします.
そしたらEnclave.edl
に次の1行を記述してください.これによって,メインのアプリケーションであるApp.cpp
から今回追記するプログラムが呼べるようになります.
enclave {
/* add */
from "TrustedLibrary/Mycode.edl" import *;
}
続いて, Mycode.edl
を編集します.
enclave {
trusted {
public void helloworld(void);
}
}
続いて, Mycode.cpp
を編集します.
#include "Enclave.h"
#include "Enclave_t.h"
void helloworld() {
}
最後にApp.cpp
から呼び出します
ecall_thread_functions();
helloworld(global_eid); // <- insert here
sgx_destroy_enclave(global_eid);
まとめ
新しい関数の生成方法は次の通りです.
1. Mycode.cpp
とMycode.edl
をTrusted Library/に作成する.
2. Enclave.edl
にfrom "Mycode.edl" import *
宣言を書く.
3. Mycode.edl
にpublic void helloworld(void);
のプロトタイプ宣言を行う.
4. Mycode.cpp
に本体の宣言を行う.
5. App.cpp
からhelloworld()
をコールする.