本文作者:邱朋飞
安装完SGX SDK后,我们可以在输入的安装目录下的/sgxsdk/SampleCode文件夹下找到Intel提供的SGX应用程序示例,共有6个例子,根据名字可以大概判断是做什么的,每个示例中的README.txt文件给出了示例的详细信息。6个示例如下所示:
1. 复制SampleEnclave示例并建立自己的HelloWorld项目
SampleEnclave示例实现了安全printf函数,可以被用来安全打印我们需要打印的字符串。我们把SampleEnclave示例复制到自己的文件夹中,基于该示例,我们开发一个使用Enclave打印Hello World!的应用程序。我们把复制得到的SampleEnclave文件夹名称改成HelloWorld文件夹。下左1图展示了项目的目录结构:
2. 删除一些不需要的文件
其中.settings是隐藏文件夹,里面的language.settings.xml定义了一些与语言相关的信息,我们不用管它。.cproject和.project是隐藏文件,我们也不用管它们。README.txt没有用,我们可以删除README.txt。最后项目的目录结构如上左2图所示。
3. 项目各个部分内容简介
3.1 App文件夹
该文件夹存放应用程序中的不可信代码部分,共有2个文件和2个文件夹,App.cpp文件、App.h文件、Edger8rSyntax文件夹和TrustedLibrary文件夹
3.1.1 App.cpp文件:该文件是应用程序中的不可信部分代码,其中包括了创建Enclave及销毁Enclave的代码,也定义了一些相关的返回码供使用者查看Enclave程序的执行状态。其中的main函数是整个项目的入口函数。是我们要修改的文件。
3.1.2 App.h文件:该文件是应用程序中的不可信部分代码的头文件,定义了一些宏常量和函数声明。我们不用进行更改。
3.1.3 Edger8rSyntax文件夹:该文件夹提供了一些工具,我们不用进行更改。
3.1.4 TrustedLibrary文件夹:该文件夹提供了一些函数库,我们不用进行更改。
3.2 Enclave文件夹
该文件夹存放应用程序中的可信代码部分和可信与不可信代码接口文件,共有6个文件和2个文件夹,Enclave.config.xml文件、Enclave.cpp文件、Enclave.h文件、Enclave.edl文件、Enclave.lds文件、Enclave_private.pem文件、Edger8rSyntax文件夹和TrustedLibrary文件夹
3.2.1 Enclave.config.xml文件:该文件是Enclave的配置文件,定义了Enclave的元数据信息,我们可以不用更改。
3.2.2 Enclave.cpp文件:该文件是应用程序中的可信