我有一个像这样的C ++结构:
struct node
{
string splitOn;
string label;
bool isLeaf;
vector<string> childrenValues;
vector<node*> children;
};
我想从App传递或阅读此英特尔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:英特尔SGX飞地不支持任何序列化库。
我也在这里问了类似的问题但对我的小脑子没有真正有用的答案。 https://github.com/intel/linux-sgx/issues/229
答案 0 :(得分:1)
你不应该这样做:
struct node
{
string splitOn;
string label;
bool isLeaf;
vector<string> childrenValues;
vector<node*> children;
};
可能出现的问题:
STL不保证其大多数类型的二进制兼容性:即std::string
或std::vector
。
新交所STL的实施只是其修改/减少的一部分。
您可能会遇到与内存对齐相关的问题。
您应该为此实现自定义序列化。