首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SGX飞地边缘函数的C++参数

SGX飞地边缘函数的C++参数
EN

Stack Overflow用户
提问于 2017-01-27 19:47:03
回答 1查看 960关注 0票数 1

我正在尝试编写一个简单的SGX飞地,它接受一个布尔向量,但显然edger8r创建了c代码,所以edl代码

代码语言:javascript
复制
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‘标记这个吗?我觉得会有帮助的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-03 10:38:34

#include语法不正确。不需要散列- include

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

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

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

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41901884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档