Я пытаюсь написать простой проект SGX для начала. Итак, у меня есть основная подпрограмма хост-приложения, из которой я в значительной степени скопировал Блог Ларса Рихтера:
#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;
}
Он хорошо компилируется (я использую компилятор Intel 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.
Идти к app_test_save настройка проекта. Под отладка, менять рабочий каталог в $ (SolutionDir) Debug. Этот ответ предполагает, что оба проекта app_test_save а также enclave_test_save принадлежат к тому же решению.
Как указал Нейл, sgx_create_enclave не смог найти dll, когда программа запускалась из отладчика Visual Studio. Он работал нормально, когда я непосредственно запускал исполняемый файл в папке «Debug».
Таким образом, простой прием, чтобы заставить его работать в обоих настройках, состоит в следующем:
#define ENCLAVE_FILE _T("../Debug/Enclave.signed.dll")
Согласно этому : https://software.intel.com/en-us/forums/intel-software-guard-extensions-intel-sgx/topic/623738
Если вы используете локальный отладчик SGX, убедитесь, что изменили «текущий рабочий каталог», указывая на $ (OutDir) вместо $ (ProjectDir).
Свойства конфигурации -> Отладка -> Рабочий каталог -> $ (OutDir).