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

你可能感兴趣的:(SGX)