加载Enclave时出错:无法使用CreateFile()打开文件

问题描述 投票:0回答:4

我正在尝试编写一个简单的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.
c++ windows sgx enclave
4个回答
1
投票

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


0
投票

正如Neil指出的那样,当从Visual Studio的调试器中运行程序时,sgx_create_enclave无法找到dll。当我直接在“Debug”文件夹中运行可执行文件时,它工作正常。

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

#define ENCLAVE_FILE _T("../Debug/Enclave.signed.dll")

0
投票

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

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

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


0
投票

错误基本上意味着它无法找到您的.dll文件。执行dir / a / s以查找Enclave.signed.dll,然后相应地更改名称。当您创建安全区时,它将生成signed.dll文件。如果您的飞地名称是Enclave12,则DLL名称为Enclave12.signed.dll。你解决这个问题然后你应该好好去。

© www.soinside.com 2019 - 2024. All rights reserved.