C++ SGX 安全区边缘函数的参数
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 {
};
};
产生编译错误(有趣的是,英特尔编译器以"灾难性错误"的标题报告它),指出找不到标头vector
。
在我看来,只需使用 c++ 标志编译输出边缘代码即可解决问题。这样行得通吗?即使是这样,有没有更干净的方法来做到这一点(即具有C++标准类型参数的边缘函数)?
PS:我没有足够的代表来添加新标签,有人会用"edger8r"标记它吗?我认为这会有所帮助。
#include
是不正确的EDL语法。无需哈希 - include
ecalls 和 ocall 中的参数必须是 C 类型 - 因此不支持 vector
和 bool
。
对于vector
,您需要将其转换为 C 类型(可能创建一个结构或 void 指针),然后传递一个带有其长度的指针。
对于bool
,我想,最好传递一个int
来表示布尔值。
您还必须为指针指定特殊属性:
-
[in]
- 如果要将其复制到安全区(您还需要指定其长度)(也称为按值传递) -
[out]
- 如果要从安全区复制回来 -
[user_check]
- 最简单的选择 - 您只需传递一个指针,安全区将读取和写入不受信任的内存。(又名通过指针)
不要忘记将参数重新转换为C++类型!
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类