2017-11-03 12 views
0

をコンパイルされる方法をどこで:bashの上で次にSGX飛び地:行列を行い、実際の機能が行くと、私は最初のシンプルな飛び地機能しなかった文書の多くを読んだ後、それが

enclave { 
    //Include files 

    //Import other edl files 

    //Data structure declarations to be used as parameters of the 
    //function prototypes in edl 

    trusted { 
      public function myFirstMethod([in] int *a, [in] int *b,[out] int *sum); 
    }; 

    untrusted { 
    }; 
}; 

を私はedger8rを実行します。

あなたは、スキーマ上で見ることができるよう
sgx_edger8r enclave.edl 

は、それから、次のファイルを生成:

Generated files

だから私は、私が見つけた唯一の参照は、この関数であるenclave_t.c上のどこかに想定しています。特に

ms->ms_retval = myFirstMethod(_in_a, _in_b); 

static sgx_status_t SGX_CDECL sgx_myFirstMethod(void* pms) 
{ 
    CHECK_REF_POINTER(pms, sizeof(ms_myFirstMethod_t)); 
    ms_myFirstMethod_t* ms = SGX_CAST(ms_myFirstMethod_t*, pms); 
    sgx_status_t status = SGX_SUCCESS; 
    int* _tmp_a = ms->ms_a; 
    size_t _len_a = sizeof(*_tmp_a); 
    int* _in_a = NULL; 
    int* _tmp_b = ms->ms_b; 
    size_t _len_b = sizeof(*_tmp_b); 
    int* _in_b = NULL; 

    CHECK_UNIQUE_POINTER(_tmp_a, _len_a); 
    CHECK_UNIQUE_POINTER(_tmp_b, _len_b); 

    if (_tmp_a != NULL) { 
     _in_a = (int*)malloc(_len_a); 
     if (_in_a == NULL) { 
      status = SGX_ERROR_OUT_OF_MEMORY; 
      goto err; 
     } 

     memcpy(_in_a, _tmp_a, _len_a); 
    } 
    if (_tmp_b != NULL) { 
     _in_b = (int*)malloc(_len_b); 
     if (_in_b == NULL) { 
      status = SGX_ERROR_OUT_OF_MEMORY; 
      goto err; 
     } 

     memcpy(_in_b, _tmp_b, _len_b); 
    } 
    ms->ms_retval = myFirstMethod(_in_a, _in_b); 
err: 
    if (_in_a) free(_in_a); 
    if (_in_b) free(_in_b); 

    return status; 
} 

しかし、ここでmyFirstMethodを置きますか?また、静的ライブラリとしてアプリケーションの一部として私のエンクレーブをコンパイルする方法もあります。私は、検索としてFASとして

はtheeseリンクでのチュートリアルです:

すべてがネイティブでGNU/Linuxの上で実行されないのVisual Studioに言及します私にはちょっと難しいです。

編集1:

さらに私はリンクが言及として、私はシミュレーションモードを経由コンパイルできるhttps://github.com/01org/linux-sgxに見ている探して:

make SGX_MODE=SIM 

そして、私は正常に私がdriversdkインストールされています。私は実際のものではなく、SIMULATIONモードでコンパイルしたい。

答えて

1

自動生成された出力をどのように動作するかを理解するのに役立ちます。このレポ https://github.com/digawp/hello-enclave

のクローンを作成しようとするから、互換性のあるハードウェアを持っている場合ディミトリスが最初に確認してくださいedger8rは、エンクレーブと信頼されていない外部世界との間のインターフェイスを提供するだけです。彼らはあなたの実装を含むことは想定されていません。

myFirstMethodを別のソースファイル、たとえばenclave.cまたはenclave.cppに定義し、残りのプロジェクトとリンクする必要があります。関数のシグネチャは、edger8rが消費するポインタ修飾子を除いて、あなたのedlで宣言したものとまったく同じです。

それは次のようになります。私の知る限り、私はシミュレーションモードをコンパイル&はみ出しことができます知っているよう

void myFirstMethod(int *a, int *b, int *sum) 
{ 
    *sum = *a + *b; 
} 
関連する問題