详细介绍Intel SGX开发环境搭建和Hello Enclave程序运行
Posted 链巨人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详细介绍Intel SGX开发环境搭建和Hello Enclave程序运行相关的知识,希望对你有一定的参考价值。
这里记录Windows10下搭建Intel SGX开发环境和编写第一个Hello World程序的过程。
总共分为两部分,第一是环境搭建,第二是hello world程序编写。每一步都有截图,希望以通俗易懂的方式跟大家分享。
1. 环境安装
- 需要安装visual studio 2015或者以上
- 安装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模式,执行结果如下:
可以参考:
-
本文的源码和主要参考网页:https://software.intel.com/en-us/articles/getting-started-with-sgx-sdk-for-windows
-
SGX编程指南:https://software.intel.com/sites/default/files/managed/48/88/329298-002.pdf
-
SGX JDK下载: https://software.intel.com/en-us/sgx/sdk
-
其它参考资料:https://software.intel.com/zh-cn/SGX-Development-Guide-Part-1
-
https://software.intel.com/zh-cn/SGX-Development-Guide-Part-2
以上是关于详细介绍Intel SGX开发环境搭建和Hello Enclave程序运行的主要内容,如果未能解决你的问题,请参考以下文章