我试图编写一个简单的SGX项目。所以我有一个主要的主机应用程序例程,我几乎从Lars Richter's blog复制了
#define ENCLAVE_FILE _T("Enclave.signed.dll")
#include <tchar.h>
#include <cstdio>
#include "sgx_urts.h"
#include "Enclave_u.h"
int main()
{
sgx_enclave_id_t eid;
sgx_status_t ret = SGX_SUCCESS;
sgx_launch_token_t token = { 0 };
int updated = 0;
ret = sgx_create_enclave(ENCLAVE_FILE, SGX_DEBUG_FLAG, &token, &updated, &eid, NULL);
if (ret != SGX_SUCCESS) {
printf("\nApp: error %#x, failed to create enclave.\n", ret);
}
scanf("\n");
return 0;
}
它编译得很好(我使用英特尔C ++ 17.0编译器和Visual Studio 2015),但它并没有加载飞地。我收到以下错误消息:
[sgx_create_enclavew ..\urts\win\urts.cpp:195] Couldn't open file with CreateFile()
App: error 0x200f, failed to create enclave.
答案 0 :(得分:1)
转到 app_test_save 项目设置。在调试下,将工作目录更改为 $(SolutionDir)调试。这个答案假设两个项目 app_test_save 和 enclave_test_save 都属于同一个解决方案。
答案 1 :(得分:0)
正如Neil指出的那样,当从Visual Studio的调试器中运行程序时,sgx_create_enclave无法找到dll。当我直接在“Debug”文件夹中运行可执行文件时,它工作正常。
因此,在两种设置中使其工作的一个简单方法是执行以下操作:
#define ENCLAVE_FILE _T("../Debug/Enclave.signed.dll")
答案 2 :(得分:0)
据此:https://software.intel.com/en-us/forums/intel-software-guard-extensions-intel-sgx/topic/623738
如果您正在使用本地SGX调试器,请确保更改指向$(OutDir)而不是$(ProjectDir)的“当前工作目录”。
配置属性->调试->工作目录-> $(OutDir)。
答案 3 :(得分:0)
错误基本上是意味着它无法找到您的.dll文件。 执行dir / a / s查找Enclave.signed.dll,然后适当更改名称。 创建安全区时,它将生成signed.dll文件。如果您的安全区名称为Enclave12,则DLL名称为Enclave12.signed.dll。修复此问题,然后就应该做好了。