Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在sgx ecall中返回未知大小的指针?_C++_Sgx - Fatal编程技术网

C++ 如何在sgx 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]在ecall中返回未知大小的指针?我知道的当前方法要求在调用ecall时设置指针的大小,例如:

[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])