gpt4 book ai didi

c++ - 如何在 sgx ecall 中返回未知大小的指针?

转载 作者:行者123 更新时间:2023-11-28 04:43:18 24 4
gpt4 key购买 nike

如何使用 [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
);

可信实现可以用最多 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,
);

边缘代码需要提前知道缓冲区的大小,并且它无法接受仅来自可信函数的数据长度(在这种情况下,无法分配相应的缓冲区来承载数据拷贝不受信任的一方)。

关于c++ - 如何在 sgx ecall 中返回未知大小的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49769792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com