簡體   English   中英

如何在sgx ecall中返回大小未知的指針?

[英]How to return a pointer of unknown size in an sgx ecall?

如何使用[out]在ecall中返回未知大小的指針? 我知道的當前方法要求在調用ecall時設置指針的大小,例如:

[out, size=len] int *p, size_t len

還有另一種方法,我在調用ecall函數時不必指定指針的大小嗎?

您似乎需要EDL生成的代碼才能從飛地獲取未知長度的數據(在調用時)。

選項1是提供一個足夠大的緩沖區來接收數據:

public int ecall_test(
                              uint32_t  data_capacity,
    [out, size=data_capacity] uint8_t*  data,
    [out]                     uint32_t* data_size
);

可信執行最多可以填充緩沖區data_capacity字節的數據,並在返回的實際長度data_size 邊緣功能代碼仍會從受信任的輸出緩沖區中復制data_capacity字節,但是您應該沒問題,因為您的data_size < data_capacity字節將得到處理。

選項2分兩步進行:第一個ecall請求可信方法將要返回的實際數據長度,然后是另一個提供實際數據的調用。

public int ecall_test_1(
    [out]                 uint32_t* data_size
);

public int ecall_test_2(
                          uint32_t  data_size,
    [out, size=data_size] uint8_t*  data,
);

邊緣代碼需要事先知道緩沖區的大小,並且不能僅從受信任的函數接受數據的長度(在這種情況下,無法分配相應的緩沖區來在不受信任的一側攜帶數據的副本)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM