C++的SGX领土边缘函数的参数
问题描述:
我想写一个简单的SGX飞地,需要在布尔值的矢量,但显然edger8r创建C代码;所以EDL码C++的SGX领土边缘函数的参数
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'标记这个?我认为这会有所帮助。
答
#include
是不正确的EDL语法。不需要散列 - include
ecalls和ocalls中的参数必须是C类型 - 因此,不支持vector
和bool
。
对于vector
您需要将其转换为C类型(可能会创建一个结构体或void指针),然后传递一个指针的长度。
对于bool
,我猜,最好通过int
来表示一个布尔值。
您还必须为指针指定特殊的属性:
-
[in]
- 如果你想将它复制到飞地(你还需要指定它的长度)(又名按值传递) -
[out]
- 如果你想从飞地复制 -
[user_check]
- 最简单的选择 - 你只需传递一个指针,飞地就会读取和写入不可信内存。 (又名通过指针)
不要忘了将参数转换回C++类型!
您可以为您的建议解决方案添加一段代码。它会更清楚 – Nipun