C ++ - второй уровень защищенного кода в коде пользовательского пространства - PullRequest
0 голосов
/ 26 февраля 2019

Учитывая этот код:

class module {
  public:
    virtual void run(void (*callback)(int)) = 0;
    byte* memory;
}
int main() {
  module m1 = loadSomeUntrustedModule();
  module m2 = loadSomeUntrustedModule();
  m1.memory[31] = 5;
  //m1.run(); //?
  return m1.memory[32];
}

Я хочу выполнить run в module, который не может получить доступ к коду вне себя, изолируя его с помощью собственной области памяти, доступной только из основного процесса,Защищен от утечек памяти и, возможно, от вредоносного кода.Код не нуждается в доступе ни к чему, кроме своей собственной памяти.Я намерен, чтобы этот код был кроссплатформенным, компилировался и работал для Linux, Windows, Mac, Android и т. Д. *

Это довольно простой вопрос;Как запустить песочницу / защищенный код в C ++ с требованиями, о которых говорилось выше?Но один гораздо более сложный для ответа, я бы предположил.Тот, который я предположил бы содержать сборку.

1 Ответ

0 голосов
/ 26 февраля 2019

Не думаю, что есть кроссплатформенное решение для загрузки модулей в один и тот же процесс (более того, у нас пока нет кроссплатформенных модулей).

Более или менее портативное решение будетбыть, чтобы создать другой процесс и использовать межпроцессное взаимодействие.Они все еще различны для разных ОС, но кроссплатформенные оболочки существуют.

Одной из известных реализаций является песочница Google Chrome.В Windows он создает подпроцессы, сводит их маркеры доступа к минимуму и подключает их системные системные интерфейсы ввода-вывода для передачи данных через каналы в родительский процесс.Хорошая песочница - это , что трудно ...

...