gpt4 book ai didi

marshalling - 将 C++ 结构从英特尔 SGX 中的应用程序传递到 enclave

转载 作者:行者123 更新时间:2023-12-03 01:39:43 24 4
gpt4 key购买 nike

我有一个像这样的 C++ 结构:

struct node                                                 
{
string splitOn;
string label;
bool isLeaf;
vector<string> childrenValues;
vector<node*> children;
};

我想将其从应用程序传递或读取到英特尔 SGX 飞地。基于此处提到的内容:https://software.intel.com/en-us/forums/intel-software-guard-extensions-intel-sgx/topic/703489

我尝试过这个:

应用程序:

node *root = new node;                                          
root = buildDecisionTree(dataTable, root, *tableInfo); //this initializes the root
void *data3 = static_cast<void*>(root);
ecall_my_dtree(global_eid, &ecall_return, data3);

EDL:

  public int ecall_my_dtree([user_check] void* data);

飞地:

int ecall_my_dtree(void *data2)
node* root2 = static_cast<node*>(data2);

但看起来 root2 无法正确初始化并且它指向垃圾。

关于user_check:https://software.intel.com/en-us/node/708978

有关如何正确读取飞地内的数据的任何帮助。PS:Intel SGX enclave不支持任何序列化库。

我也在这里问过类似的问题,但对我的小大脑来说没有真正有用的答案。 https://github.com/intel/linux-sgx/issues/229

最佳答案

你不应该这样做:

struct node                                                 
{
string splitOn;
string label;
bool isLeaf;
vector<string> childrenValues;
vector<node*> children;
};

可能的问题:

  • STL 不保证大多数类型的二进制兼容性:即 std::stringstd::vector

  • SGX 的 STL 实现只是其修改/缩减的子集。

  • 您可能会遇到与内存对齐相关的问题。

您应该为此实现自定义序列化。

关于marshalling - 将 C++ 结构从英特尔 SGX 中的应用程序传递到 enclave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49327022/

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