Я хочу создать систему интерактивного обучения кода, чтобы пользователи (как правило, молодые программисты) могли писать содержимое одной функции на языке C++, отправлять ее на сервер и там она будет скомпилирована в динамическую библиотеку и вызвана из основной программы.Могу ли я запретить выполнение определенных функций при сбое программы?
Программа ожидает, что функция вернет правильный ответ в зависимости от заданных параметров.
Конечно, будут дети, которые будут вызывать ошибки, такие как ошибка сегментации. (сервер работает от Linux).
Итак, могу ли я обработать сигнал, который мог бы выйти из функции?
То, что я хочу, чтобы достичь:
for (int i = 0; i < PLAYER_NUM; i++) {
snprintf(buf, sizeof(buf), "players/%s.so", player[i]);
handle = dlopen(buf, RTLD_LAZY);
add[i] = (int (*)(int, int))dlsym(handle, "sum");
} // that was simply loading of functions from libraries.
for (int x = 0; x < 10; x++)
for (int i = 0; i < PLAYER_NUM; i++) {
if(failed[i]) continue;
ret = add[i](x, 5);
if(sigfault_received() || res != (x + 5)) {
failed[i] = true;
}
}
О том, что вы можете сделать, это жить с тем, что он будет разбиваться и выяснить, как 1) обеспечить, чтобы он не повредил остальную часть системы, когда он это делает, и 2) быстро и легко восстанавливается, когда (нет, если) это происходит. Моей непосредственной реакцией было бы запустить их код на виртуальной машине. –
Добавлен тег «песочница», потому что это обычное имя для таких защит. – MSalters