2017-01-27 12 views
0

ブーリアンのベクトルを取り入れた単純なSGXエンクレーブを作成しようとしていますが、明らかにedger8rはcコードを作成します。そのEDLコードC++のSGXエンクレーブエッジ関数への引数

enclave{ 

    from "sgx_tstdc.edl" import *; 
    #include "BetaDist.h" 
    #include <vector> 

    trusted { 
     BetaDist Estimate(std::vector<bool> X, double max_z, double max_delta); 
    }; 

    untrusted { 
    }; 
}; 

はヘッダvectorが見つからないと言って(面白いこと、インテル・コンパイラーは、タイトル「致命的なエラー」の下にそれを報告します)コンパイルエラーを生成します。

この問題は、出力エッジコードをC++フラグでコンパイルするだけで解決できると思います。それは働くだろうか?その場合でも、これを行うためのよりクリーンな方法がありますか(つまり、C++標準型パラメータでエッジ関数を使用しています)?

PS:私は新しいタグを追加するのに十分な担当者がいません。誰でもこれを 'edger8r'とタグ付けしますか?それは私が考えるのに役立つだろう。

答えて

1

#includeは、誤ったEDL構文です。ハッシュの必要はありません - include

ecallsとocallsの引数はCタイプでなければなりません。つまり、vectorboolはサポートされていません。

vectorの場合は、C型(構造体またはvoidポインタを作成することもできます)に変換し、その長さのポインタを渡す必要があります。

boolの場合は、intをブール値にすることをお勧めします。

また、ポインタのための特別な属性を指定する必要があります。

  • [in] - あなたは飛び地にそれをコピーする場合(あなたはまた、その長さを指定する必要があります)(別名値渡し)
  • [out]を - あなたがエンクレーブからコピーバックしたい場合は
  • [user_check] - 最も簡単なオプション - ポインタを渡すだけで、エンクレーブは信頼できないメモリとの間で読み書きを行います。 (別名ポインタ渡し)

引数をC++型に戻すのを忘れないでください!

+0

提案されたソリューションのコードを追加することができます。より明確になるだろう – Nipun

関連する問題