繁体   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