Я пытаюсь написать простой анклав SGX, который принимает вектор логических значений, но, очевидно, edger8r создает код c; так код EDL
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’? Это будет полезно, я думаю.
#include
неверный синтаксис EDL. Нет необходимости в хеше — include
Аргументы в ecalls и ocalls должны быть типа C — так, vector
а также bool
не поддерживаются
За vector
вам нужно преобразовать его в тип C (возможно, создать struct или void указатель), а затем передать указатель с его длиной.
За bool
Полагаю, лучше пройти int
представлять логическое значение.
Вы также должны указать специальный атрибут для указателей:
[in]
— если вы хотите скопировать его в анклав (вам также нужно указать его длину) (иначе говоря, по значению)[out]
— если вы хотите скопировать обратно из анклава[user_check]
— самый простой вариант — вы просто передаете указатель, и анклав будет читать и записывать в недоверенную память. (он же указатель)Не забудьте привести аргументы обратно в типы C ++!
Других решений пока нет …