Используя OCALL, я хочу получить копию строки C, которая динамически создается в ненадежной памяти, в мой анклав. Таким образом, я должен использовать атрибут [out, string]
.
Однако я не могу этого сделать, потому что мне также нужно добавить атрибут [in]
. Проблема в том, что я действительно не знаю размер строки, и я не хочу накладных расходов (которые идут с [in]
) из-за ненужного копирования строки из анклава в ненадежную память каждый раз, когда я делаю OCALL.
Мой edl-файл:
enclave {
trusted {
public void ecall_open(void);
};
untrusted {
void ocall_get_string([out, string] char* str);
};
};
error: string/wstring/sizefunc should be used with an 'in' attribute
Почему я должен добавить атрибут [in]
?
Есть ли способ избежать этих накладных расходов по соображениям производительности?
string
иwstring
нельзя использовать только сout
. Возможно, вы можете заставить свой OCALL использовать ECALL для отправки данных в анклав, что-то вроде:ocall_get_string() allow ecall_to_pass_string([in, string] char *str)
. В руководстве это написано на странице 59 под заголовком Предоставление доступа к ECALLs. - person Daniel   schedule 02.03.2018