【问题标题】:C++ Arguments to SGX Enclave Edge FunctionsSGX Enclave 边缘函数的 C++ 参数
【发布时间】:2017-01-27 19:47:03
【问题描述】:

我正在尝试编写一个简单的 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”标记它吗?我认为这会有所帮助。

【问题讨论】:

    标签: c++ stl sgx enclave


    【解决方案1】:

    #include 是不正确的 EDL 语法。不需要哈希 - include

    ecalls 和 ocalls 中的参数必须是 C 类型 - 因此,不支持 vectorbool

    对于vector,您需要将其转换为C 类型(可能创建一个struct 或void 指针),然后传递一个指针及其长度。

    对于bool,我猜,最好传递一个int 来表示布尔值。

    您还必须为指针指定特殊属性:

    • [in] - 如果你想将它复制到 enclave 中(你还需要指定它的长度)(也就是按值传递)
    • [out] - 如果你想从 enclave 复制回来
    • [user_check] - 最简单的选择 - 你只需传递一个指针,飞地就会读取和写入不受信任的内存。 (又名指针传递)

    不要忘记将参数转换回 C++ 类型!

    【讨论】:

    • 您可以为建议的解决方案添加一段代码。会更清楚
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2014-08-25
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多