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);