我正在尝试编写一个简单的SGX飞地,它接受一个布尔向量,但显然edger8r创建了c代码,所以edl代码
enclave{
from "sgx_tstdc.edl" import *;
include "BetaDist.h"
include <vector>
trusted {
BetaDist Estimate(std::vector<bool> X, double max_z, double max_delta);
};
untrusted {
};
};产生一个编译错误(有趣的是,英特尔编译器在标题“灾难性错误”下报告它),说找不到头vector。
在我看来,只要编译带有c++标志的输出边缘代码,就可以解决这个问题。那能行吗?即使是这样,是否有一种更干净的方法来做到这一点(例如,有带有C++标准类型参数的边缘函数)?
PS:我没有足够的代表来添加一个新的标签,有人会用'edger8r‘标记这个吗?我觉得会有帮助的。
发布于 2017-08-03 10:38:34
#include语法不正确。不需要散列- include
ecalls和ocalls中的参数必须是C类型-因此,不支持vector和bool。
对于vector,您需要将其转换为C类型(可能创建一个struct或void指针),然后传递一个具有其长度的指针。
对于bool,我想最好传递一个int来表示一个布尔值。
还必须为指针指定特殊属性:
[in] -如果您想要将它复制到enclave中(您还需要指定它的长度)(也就是按值传递)[out] -如果您想从飞地复制回[user_check] --最简单的选择--您只需传递一个指针,enclave就可以读取和写入不受信任的内存。(即按指针传递)不要忘记将参数转换回C++类型!
https://stackoverflow.com/questions/41901884
复制相似问题