SGX 飞地边缘函数的 C++ 参数
C++ Arguments to SGX Enclave Edge Functions
我正在尝试编写一个简单的 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 {
};
};
产生一个编译错误(有趣的是,Intel 编译器在标题 "catastrophic error" 下报告它)说 header vector
找不到。
在我看来,只需使用 c++ 标志编译输出边缘代码即可解决问题。那行得通吗?即使是这样,是否有更简洁的方法来做到这一点(即具有 C++ standard-typed 参数的边缘函数)?
PS:我没有足够的代表来添加新标签,有人可以用 'edger8r' 标记吗?我想这会很有帮助。
#include
是不正确的 EDL 语法。不需要散列 - include
ecalls 和 ocalls 中的参数必须是 C 类型 - 因此,vector
和 bool
不受支持。
对于vector
你需要把它转换成C类型(也许创建一个struct或void指针),然后传递一个指针及其长度。
对于 bool
,我想,最好传递一个 int
来表示布尔值。
您还必须为指针指定特殊属性:
[in]
- 如果你想将它复制到 enclave 中(你还需要指定它的长度)(也就是按值传递)
[out]
- 如果你想从 enclave 复制回来
[user_check]
- 最简单的选择 - 您只需传递一个指针,飞地就会读取和写入不受信任的内存。 (又名指针传递)
不要忘记将参数转换回 C++ 类型!
我正在尝试编写一个简单的 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 {
};
};
产生一个编译错误(有趣的是,Intel 编译器在标题 "catastrophic error" 下报告它)说 header vector
找不到。
在我看来,只需使用 c++ 标志编译输出边缘代码即可解决问题。那行得通吗?即使是这样,是否有更简洁的方法来做到这一点(即具有 C++ standard-typed 参数的边缘函数)?
PS:我没有足够的代表来添加新标签,有人可以用 'edger8r' 标记吗?我想这会很有帮助。
#include
是不正确的 EDL 语法。不需要散列 - include
ecalls 和 ocalls 中的参数必须是 C 类型 - 因此,vector
和 bool
不受支持。
对于vector
你需要把它转换成C类型(也许创建一个struct或void指针),然后传递一个指针及其长度。
对于 bool
,我想,最好传递一个 int
来表示布尔值。
您还必须为指针指定特殊属性:
[in]
- 如果你想将它复制到 enclave 中(你还需要指定它的长度)(也就是按值传递)[out]
- 如果你想从 enclave 复制回来[user_check]
- 最简单的选择 - 您只需传递一个指针,飞地就会读取和写入不受信任的内存。 (又名指针传递)
不要忘记将参数转换回 C++ 类型!