SGX開發:EDL與enclave接口函數中參數傳遞方式

Enclave和應用之間的Ecall/OCall的接口函數全部定義在擴展名爲edl的文件裏。通常有以下幾種參數傳遞方式:

  • [user_check]
    數組指針將不被驗證,由“arr”指向的緩衝區也不會複製到Enclave中。但enclave可以修改外部內存。
 public void ecall_array_user_check([user_check] int arr[4]);
  • [in]
    數組的緩衝區將在enclave中分配,數組的內容將複製到內部新分配的內存中。在enclave內執行的任何更改都不會影響外部的數組。
 public void ecall_array_in([in] int arr[4]);
  • [out]
    數組的緩衝區將在enclave中分配,但不會複製數組的內容。ECALL返回後,enclave內的緩衝區將複製到外部數組中。
  public void ecall_array_out([out] int arr[4]);
  • [in, out]
    數組的緩衝區將在enclave中分配,數組的內容也將被複制。ECALL返回後,enclave內的緩衝區將再次複製到外部數組中。
public void ecall_array_in_out([in, out] int arr[4]);
  • [isary]
    告訴Edger8r用戶定義的’array_t’是一個數組類型,'arr’將被視爲一個指針,沒有內存複製由於[user_check]。對於OCALLs,“arr”將指向enclave之外的內存。
public void ecall_array_isary([user_check, isary] array_t arr);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章