这里记录Windows10下搭建Intel SGX开发环境和编写第一个Hello World程序的过程。

总共分为两部分,第一是环境搭建,第二是hello world程序编写。每一步都有截图,希望以通俗易懂的方式跟大家分享。

1. 环境安装

  1. 需要安装visual studio 2015或者以上
  2. 安装Intel SGX JDK, 下载链接

本人的电脑win10,VS2017。上面的安装顺序不能颠倒,必须先安装VS。具体的安装就不讲了。在安装的时候会看到几个pdf文件,里面是很重要的安装和使用说明书,以后可能用得着。

安装好之后,打开VS,新建一个Intel SGX Enclave Project,默认配置,点击finsh完成。这里本人的项目名为Enclave1。

打开Source Files下的Enclave1.edl文件,添加内容(不是覆盖哈):

  trusted {/* define ECALLs here. */public void foo([out, size=len] char* buf, size_t len);};

打开Source Files下的Enclave1.cpp文件,添加内容(不是覆盖哈):

#include <string.h>
void foo(char *buf, size_t len)
{const char *secret = "Hello Enclave!";if (len > strlen(secret)){memcpy(buf, secret, strlen(secret) + 1);}
}


接下来配置该Enclave1项目的属性。选择项目名Enclave1,右键->属性(properties)->Debugging

现在我的方案(Solution)下面只有一个项目,而且是Enclave项目,下面我们在这个方案中新建一个项目。鼠标选择Solution名字,右键->增加->新建工程。注意这一步鼠标选择的是方案Solution ‘enclave1’,而不是Enclave1.

新建一个Empty Project,名字随便,这里起APP

在APP项目的Source Files下新建一个cpp文件,起名为mian,作为工程的程序入口点。就像普通项目的main函数所在的文件一样。

将下面的代码复制粘贴到这个新建的main文件中。会显示很多错误,先不用担心,先不管这些错误。

#include <stdio.h>
#include <tchar.h>
#include "sgx_urts.h"
#include "sample_enclave_u.h"
#define ENCLAVE_FILE _T("Enclave1.signed.dll")
#define MAX_BUF_LEN 100
int main() {sgx_enclave_id_t eid;sgx_status_t ret = SGX_SUCCESS;sgx_launch_token_t token = { 0 };int updated = 0;char buffer[MAX_BUF_LEN] = "Hello World!";// Create the Enclave with above launch token.ret = sgx_create_enclave(ENCLAVE_FILE, SGX_DEBUG_FLAG, &token, &updated, &eid, NULL);if (ret != SGX_SUCCESS) {printf("App: error %#x, failed to create enclave.\n", ret);return -1;}// An Enclave call (ECALL) will happen here.foo(eid, buffer, MAX_BUF_LEN);printf("%s", buffer);// Destroy the enclave when all Enclave calls finished.if (SGX_SUCCESS != sgx_destroy_enclave(eid))return -1;return 0;
}

按照下面图片,向APP项目中导入enclave依赖。


这时候发现main文件中的错误减少了很多。我们需要注意并根据自己的项目情况修改main文件的第四和第五行。我这里改成了下面这样。这里Enclave1是我的Solution的名字,也是我的Enclave项目的名字。Enclave1_u.h这个文件在Generated Files中,是自动生成的。

#include "Enclave1_u.h"
#define ENCLAVE_FILE _T("Enclave1.signed.dll")

修改了这个源码之后,我们再修改一下新建的APP项目的配置。


我们有一个solution,它的下面有两个项目,我们需要指定这两个项目的关系。我们希望以项目APP作为程序的入口,APP依赖项目Enclave1,所以有以下配置。



到这里,所有的代码和配置都弄好了。我们编译一下。


我们把项目跑起来

发现出现了一个error。原因是本人的电脑的CPU不支持Intel SGX。所以,我们把图片红圈中的Debug改为Simulation。

最后,我们得到了下面的运行结果,表示我们成功了。

[sgx_create_enclave_exa_ c:\sgxwindows\src_release\windows-trunk\psw\urts\win\urts.cpp:164] Couldn’t open file with CreateFile()
App: error 0x200f, failed to create enclave.
C:\Users\media\source\repos\Enclave2\Simulation\APP.exe (process 20592) exited with code -1.
Press any key to close this window

The code execution cannot proceed because sgx_urts.dll was not found. Reinstalling the program may fix this problem.

如果您遇到了上面的错误,是因为你的配置上面出现了不一致的问题。建议按照本文的方法步骤新建和配置Intel SGX。


//更新/

上面的安装步骤可以在debug模式下成功执行EnclaveSample实例代码,而RemoteAttestation实例代码不行。因为还没有安装sgx的驱动。下图的文件是在下载SDK的时候一块下载的,打开第二个pdf文档查看具体的sgx安装过程。

具体是这一个说明:

使用everything这个软件,可以查找到sgx_base.inf 和 sgx_psw.inf两个文件所在的目录。使用管理员打开一个cmd,分别进入这两个文件所在位置,输入上面的两行命令即可安装。

pnputil是什么?https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/pnputil

下面再次进入visual studio测试,使用debug模式,执行结果如下:

可以参考:

  1. 本文的源码和主要参考网页:https://software.intel.com/en-us/articles/getting-started-with-sgx-sdk-for-windows

  2. EDL文件的输入类型:https://software.intel.com/sites/default/files/managed/b2/b4/Input-Types-and-Boundary-Checking-EDL.pdf

  3. SGX编程指南:https://software.intel.com/sites/default/files/managed/48/88/329298-002.pdf

  4. SGX JDK下载: https://software.intel.com/en-us/sgx/sdk

  5. 其它参考资料:https://software.intel.com/zh-cn/SGX-Development-Guide-Part-1

  6. https://software.intel.com/zh-cn/SGX-Development-Guide-Part-2

  7. https://software.intel.com/es-es/node/701612?language=de

  8. 英特尔SGX系列教程:https://software.intel.com/zh-cn/articles/introducing-the-intel-software-guard-extensions-tutorial-series

详细介绍Intel SGX开发环境搭建和Hello Enclave程序运行相关推荐

  1. autosar架构详细介绍_基于MATLAB环境搭建满足AUTOSAR标准的模型高级培训班

    一.课程目标 1.加深对AUTOSAR标准的认识和理解 2.能够在MATLAB平台上搭建满足AUTOSAR标准要求的应用层软件模型 3.掌握建模过程中的关键概念并能够灵活运用 4.掌握一些高级建模技巧 ...

  2. Ubuntu 16.04下Intel SGX SDK环境搭建(硬件不支持情况)

    文章目录 1.下载安装包 2.安装必要的工具 2.1 On Ubuntu* 16.04: 2.2 安装alien: 2.3 下载并安装Intel® Capability Licensing Servi ...

  3. Android(一)——Eclipse+ADT 和 Android Studio 开发环境搭建及介绍

    文章目录 1. 前言介绍 1.1 JDK安装与配置 1.2 IDE开发APP流程 1.3 相关术语的解析 1.4 ADB相关指令 1.5 APP程序打包与安装流程 2. 开发环境搭建 2.1 Ecli ...

  4. cesium 页面截图_Cesium开发入门篇 | 02开发环境搭建及第一个示例

    开发环境准备 利用Cesium API进行二次开发属于Web前端开发范畴,目前比较火的Web三剑客包括React.Vue.AngularJS,每个js库的详细介绍可转至官网查看,在此不做详细介绍.本次 ...

  5. cesium 页面截图_Cesium开发入门篇 | 02Cesium开发环境搭建及第一个示例

    01 开发环境准备 利用Cesium API进行二次开发属于Web前端开发范畴,目前比较火的Web三剑客包括React.Vue.AngularJS,每个js库的详细介绍可转至官网查看,在此不做详细介绍 ...

  6. 【Java基础快速入门】概述及开发环境搭建

    概述及开发环境搭建 概述 历史 发展历程 运行机制 模块图 环境搭建 程序示例 注释 标识符 概述 历史 SUN:Stanford University Network 1982年成立 发展历程 Oa ...

  7. 启明云端分享|ESP32-S3开发环境搭建,这里我们会介绍两个比较常用的开发环境搭建:WINDOWS\LINUX

    ESP32-S3开发环境搭建,这里我们会介绍两个比较常用的开发环境搭建:WINDOWS\LINUX 详细安装步骤概览 注:目前master分支,支持S3. 官方开发文档:包含多种平台 https:// ...

  8. qgis二次开发环境搭建(超级详细)

    最近有一个项目要求基于qgis+QT进行二次开发开发,要使用到qgis平台.陆陆 续续花了差不多两个多星期,在把开发环境搭建起来. 首先就面临2种选择,一种 到qgis官网下载源码,进行编译,此 情况 ...

  9. 【SpringBoot项目实战+思维导图】瑞吉外卖①(项目介绍、开发环境搭建、后台登陆/退出功能开发)

    文章目录 软件开发整体介绍 软件开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型 技术选型 功能架构 角色 开发环境搭建 数据库环境搭建 创建数据库 数据库表导入 数据库表介绍 Ma ...

最新文章

  1. SQL-PL/SQL基础
  2. Hibernate-----阶段总结
  3. java判断实例_java判断类和实例的关系
  4. SQL Server Management Studio清除历史登陆记录
  5. python教程自带数据库_python教程自带数据库 | Python学哪个数据库
  6. mac/linux 解决启动命令行出现declare问题
  7. mycli到底有多好用?
  8. java读取propertiesshib,Java CommonUtils.constructServiceUrl方法代码示例
  9. destoon不支持php7,Destoon 7.0常见问题解决方法
  10. [MyBatis]诡异的Invalid bound statement (not found)错误
  11. 怎么把pdf文件转换成word文件
  12. 【GIS导论】实验五 缓冲区分析和网络分析
  13. Linq的内部执行原理浅析
  14. Java实战项目,附带源码+视频教程。
  15. matlab混合copula,​MATLAB实战—最优Copula函数的选择
  16. Kubeflow 部署采坑记录
  17. mysql 连续打卡天数_Sql如何统计连续打卡天数
  18. 箴言:统计学的智慧七柱
  19. MySQL-运算符详解
  20. Synaptic dynamic

热门文章

  1. securecrt连接mysql_使用SecureCRTP 连接生产环境的web服务器和数据库服务器
  2. python3 time模块_python3 time模块
  3. 声卡硬件测试软件,RMAA声卡检测(RightMark Audio Analyzer)
  4. UiBot带你两分钟看懂RPA是什么
  5. Web API与JWT认证
  6. CentOS 7 Redis 3.2.8的安装和使用
  7. ssh 连接ubuntu的虚拟机问题
  8. 在C#中,如何将一种编码的字符串转换成另外一种编码。
  9. java排序——桶排序
  10. Karma和Jasmine 自动化单元测试环境搭建