3

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]属性を追加する必要があるのですか?

パフォーマンス上の理由から、このオーバーヘッドを回避する方法はありますか?

4

2 に答える 2

0

多分あなたはこれを試してみるべきです:

void ocall_get_string([out, size=sz] char* str, size_t sz);

size=szstrEnclave に自動的にコピーされるのサイズを意味します。サイズを指定しない場合、1 つの文字のみが Enclave にコピーされます。

于 2018-09-28T09:13:14.920 に答える