stl — C ++ Аргументы в функции SGX Enclave Edge

Я пытаюсь написать простой анклав 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’? Это будет полезно, я думаю.

1

Решение

#include неверный синтаксис EDL. Нет необходимости в хеше — include

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

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

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

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]