2017-01-30 6 views
0

처음 SGX 프로젝트를 간단하게 작성하려고합니다. 그래서 나는 거의 Lars Richter's blog에서 복사 한이 메인 호스트 응용 프로그램 루틴이 있습니다Loading Enclave : CreateFile()로 파일을 열 수 없습니다.

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

그것은 잘 컴파일 (I 인텔 C++ 비주얼 스튜디오 2015와 17.0 컴파일러를 사용하고 있습니다)을하지만로드되지 않습니다 고립 된. 닐 지적

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

App: error 0x200f, failed to create enclave. 
+1

Enclave.signed.dll이 sgx_create_enclave 어딘가에 있습니까? –

+0

솔루션의 디버그 폴더에 있습니다. –

+0

그리고 sgx_create_enclave (그게 무엇이든)가 거기에서 찾을 수 있다고 생각하게 만드는 이유는 무엇입니까? –

답변

1

이동 에 app_test_save 프로젝트 설정. 디버깅에서 작업 디렉터리에서 $ (SolutionDir) 디버그으로 변경하십시오. 이 답변은 두 프로젝트 모두 app_test_saveenclave_test_save이 동일한 솔루션에 속한다고 가정합니다.

0

이 sgx_create_enclave이 프로그램은 비주얼 스튜디오의 디버거 내에서 실행되고 있던 DLL을 찾을 수 없습니다 : 나는 다음과 같은 오류 메시지가 나타납니다. "Debug"폴더에서 실행 파일을 직접 실행하면 정상적으로 작동합니다.

그래서 간단한 트릭이 두 설정에서 작동하게하려면 다음을 수행하는 것입니다

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

이 솔루션은 DLL이 항상 작업 디렉터리에 상대적이라고 가정하기 때문에 다른 곳에 문제가 발생할 것입니다. 예를 들어 프로그램은 C :의 루트에서'c : \ Users \ user \ program'으로 실행될 수 있으며 dll은 존재할 수없는 디렉토리 인'c : \ .. \ Debug'에서 검색됩니다. – user4581301

+0

이 시점에서 나는 생산 문제에 관심이 없다. –

+0

이해할 만하지만이 답변은 다른 사용자가 읽을 수 있도록 작성되었으며, 다른 사용자는이 솔루션이 해당 케이스에서 사용하지 못할 수 있음을 알고 있어야합니다. – user4581301