2017-01-27 17 views
0

나는 boolean의 벡터를 취하는 간단한 SGX 영토를 작성하려고하지만 분명히 edger8r은 c 코드를 작성합니다. 그래서 EDL 코드SGX에 대한 인수 Enclave Edge 함수

enclave{ 

    from "sgx_tstdc.edl" import *; 
    #include "BetaDist.h" 
    #include <vector> 

    trusted { 
     BetaDist Estimate(std::vector<bool> X, double max_z, double max_delta); 
    }; 

    untrusted { 
    }; 
}; 

컴파일 오류 (재미있게, 인텔 컴파일러는 제목 "치명적인 오류"아래를보고) 헤더 vector 찾을 수 없습니다 수 없다는를 생성합니다.

문제는 C++ 플래그로 출력 가장자리 코드를 컴파일하는 것으로 해결할 수 있습니다. 그게 효과가 있니? 그렇다면 C++ 표준 유형의 매개 변수로 가장자리 기능을 사용하는 등 더 깨끗한 방법이 있습니까?

추 신 : 새로운 태그를 추가 할 담당자가 충분하지 않습니다. 누군가 'edger8r'로 태그를 붙이시겠습니까? 내 생각에 도움이 될거야.

답변

1

#include은 잘못된 EDL 구문입니다. 해시 필요 없음 - include

ecalls 및 ocalls의 인수는 C 유형이어야합니다. 따라서 vectorbool은 지원되지 않습니다.

vector의 경우 C 유형 (구조체 또는 무효 포인터 생성 가능)으로 변환 한 다음 길이가있는 포인터를 전달해야합니다.

bool의 경우 부울 값을 나타내려면 int을 전달하는 것이 좋습니다.

또한 포인터에 대한 특별한 속성을 지정해야합니다 :

  • [in]을 - 당신이 영토에 복사하려면 (일명 값에 의해 통과) (당신은 또한 길이를 지정해야합니다)
  • [out] - 영토에서 복사하려는 경우
  • [user_check] - 가장 쉬운 옵션 - 포인터 만 전달하면 엔클로저는 신뢰할 수없는 메모리에서 읽고 쓰게됩니다. (일명 포인터에 의한 패스)

인수를 C++ 유형으로 다시 캐스팅하는 것을 잊지 마십시오!

+0

제안 된 솔루션에 대한 코드를 추가 할 수 있습니다. 더 분명해질 것이다. – Nipun