Отключение системных вызовов в C ++ - PullRequest
2 голосов
/ 11 мая 2011

Можно ли отключить системные вызовы при компиляции кода C ++?И если это так, как бы я это сделал?

И еще немного расширить этот вопрос.Я хочу сделать программу не способной взаимодействовать с операционной системой, за исключением чтения и записи файлов.Возможно ли это сделать?

РЕДАКТИРОВАТЬ: Я не имею возможности взаимодействовать с ОС, я имею в виду не иметь возможности что-либо изменить в ОС, например, создание, редактирование или удаление чего-либо.Моя главная проблема - системные вызовы, которые почти во всех случаях должны быть вредными.

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

Ответы [ 4 ]

3 голосов
/ 11 мая 2011

Да, это, конечно, возможно.

Взгляните на исходный код geordi , чтобы узнать, как он это делает. Geordi - это IRC-бот, который компилирует, связывает и запускает код C ++ в среде, где большинство системных вызовов отключены.

1 голос
/ 11 мая 2011

Вы можете использовать любую комбинацию из следующих:

  • создайте свою собственную библиотеку с фиктивной функцией под названием system и свяжите ее с кодом студента (при условии, что вы управляете шагами сборки)
  • grep исходный код (хотя хаки предварительной обработки могут обойти это)
  • запускать встроенные двоичные файлы под непривилегированным идентификатором пользователя, после chroot и т. Д.
  • использовать виртуальную машину
  • вызовет компилятор с -Dsystem= (хотя студент может #undef)
  • (возможно - нужно проверить соглашение с конечным пользователем), загрузить свой источник в ideone или аналогичный и позволить их безопасности справиться с такими проблемами
1 голос
/ 11 мая 2011
#define system NO_SYSTEM_CALL

Если вы в порядке с макросами, чтобы генерировать ошибки для целей компиляции.

0 голосов
/ 11 мая 2011

Программа всегда может вызывать системные вызовы, при аренде под * nix она может. Однако вы можете взглянуть на SELinux, Apparmor, GRsec - это гарантии ядра, которые могут блокировать определенные системные вызовы для приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...