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类型 - 因此,不支持vectorbool

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

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

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

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

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

+0

您可以为您的建议解决方案添加一段代码。它会更清楚 – Nipun