C++ 如何在sgx ecall中返回未知大小的指针?
如何使用[out]在ecall中返回未知大小的指针?我知道的当前方法要求在调用ecall时设置指针的大小,例如:C++ 如何在sgx ecall中返回未知大小的指针?,c++,sgx,C++,Sgx,如何使用[out]在ecall中返回未知大小的指针?我知道的当前方法要求在调用ecall时设置指针的大小,例如: [out, size=len] int *p, size_t len 是否有另一种方法,在调用ecall函数时不必指定指针的大小?您似乎需要EDL生成的代码从enclave获取未知长度的数据(在调用时) 选项1是提供足够大的缓冲区以接收数据: public int ecall_test( uint32_t data_ca
[out, size=len] int *p, size_t len
是否有另一种方法,在调用ecall函数时不必指定指针的大小?您似乎需要EDL生成的代码从enclave获取未知长度的数据(在调用时) 选项1是提供足够大的缓冲区以接收数据:
public int ecall_test(
uint32_t data_capacity,
[out, size=data_capacity] uint8_t* data,
[out] uint32_t* data_size
);
受信任的实现可以用最多数据容量
字节的数据填充缓冲区,并以数据大小
返回实际长度。边缘函数代码仍将从受信任的输出缓冲区复制数据\u容量
字节,但您应该没事,因为您的数据\u大小
数据\u容量
字节将得到处理
选项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,
);
边缘代码需要预先知道缓冲区大小,不能接受可信函数中的数据长度(在这种情况下,没有办法分配相应的缓冲区来承载不可信C++中的数据副本)。为什么有一个C++标签?@ GuiLuMeMiLAN我不想猜测,我可以知道它的大小,但从包内动态。@量子物理是的,这是关于使用英特尔SGX的C++应用程序。指针有一个固定的大小,<代码> sieZof(int *)< />。那不是
len
所指的。这是p
所指向的长度,因此一些sizeof(int[N])
。