2017-01-27 3 views
0

Я пытаюсь написать простой SGX-анклав, который принимает вектор булев, но, видимо, edger8r создает c-код; поэтому EDL кодC++ Аргументы для граничных функций SGX Enclave

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

выдает ошибку компиляции (Занятно, компилятор Intel сообщает под названием «катастрофической ошибкой») изречение заголовок vector не может быть найден.

Мне кажется, что проблему можно решить, просто компилируя выходной краевой код с флагом C++. Будет ли это работать? Даже если это так, есть ли более чистый способ сделать это (т. Е. Иметь краевые функции со стандартными параметрами C++)?

PS: У меня нет достаточного количества повторений для добавления нового тега, можно ли пометить его «edger8r»? Это будет полезно, я думаю.

ответ

1

#include был некорректным. Нет необходимости в хеш - include

Аргументы в цветах и ​​ocalls должны быть типа C - так, vector и bool не поддерживаются.

Для vector вам необходимо преобразовать его в тип C (возможно, создать указатель struct или void), а затем передать указатель с его длиной.

Для bool, я думаю, лучше передать int для представления логического значения.

Вы также должны указать специальный атрибут для указателей:

  • [in] - если вы хотите, чтобы скопировать его в анклав (также необходимо указать длину) (он же передать по значению)
  • [out] - если вы хотите скопировать обратно из анклава
  • [user_check] - самый простой вариант - вы просто передаете указатель, и анклав будет читать и записывать в ненадежную память. (aka pass by pointer)

Не забудьте привести аргументы обратно в типы C++!

+0

вы можете добавить код к вашему предлагаемому решению. это будет более понятно – Nipun

Смежные вопросы