0

我正在尝试编写一个简单的 SGX 项目作为开始。所以我有这个主要的主机应用程序例程,我几乎从Lars Richter 的博客中复制了它:

#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;
}

它编译得很好(我正在使用带有 Visual Studio 2015 的 Intel C++ 17.0 编译器),但它不会加载 enclave。我收到以下错误消息:

[sgx_create_enclavew ..\urts\win\urts.cpp:195] Couldn't open file with CreateFile()

App: error 0x200f, failed to create enclave.
4

4 回答 4

1

转到app_test_save项目设置。在Debugging下,将工作目录更改为$(SolutionDir)Debug。这个答案假设两个项目app_test_saveenclave_test_save属于同一个解决方案。

于 2017-07-05T16:24:11.840 回答
0

错误基本上意味着它无法找到您的 .dll 文件。执行 dir /a/s 找到 Enclave.signed.dll 然后适当地更改名称。当您创建 enclave 时,它​​将生成 signed.dll 文件。如果您的 enclave 名称是 Enclave12,则 DLL 名称是 Enclave12.signed.dll。你解决了这个问题,那么你应该很高兴。

于 2019-04-30T18:56:06.607 回答
0

据此:https ://software.intel.com/en-us/forums/intel-software-guard-extensions-intel-sgx/topic/623738

如果您使用的是本地 SGX 调试器,请确保将“当前工作目录”更改为指向 $(OutDir) 而不是 $(ProjectDir)。

配置属性 --> 调试 --> 工作目录 --> $(OutDir)。

于 2018-06-27T08:08:15.793 回答
0

正如 Neil 指出的那样,当程序从 Visual Studio 的调试器中运行时,sgx_create_enclave 找不到 dll。当我直接运行“调试”文件夹中的可执行文件时,它运行良好。

因此,使其在两种设置中都起作用的一个简单技巧是执行以下操作:

#define ENCLAVE_FILE _T("../Debug/Enclave.signed.dll")
于 2017-01-30T20:19:26.423 回答