Моды распространяются в виде файлов .cpp, поэтому они компилируются на машинах пользователей. Так что в идеале я могу использовать некоторые параметры компилятора.
Я уже все настроил, за исключением аспекта безопасности, в настоящее время все функции мода просто ссылаются на функции игры. Модам разрешен только один предоставленный заголовочный файл, который содержит несколько основных классов, таких как массивы, матрицы, строки и т. д., не включающий никаких стандартных заголовков C++, что предотвращает вызов таких функций, как system, но поскольку основное приложение включает функцию system, не означает ли это, что где-то в памяти есть указатель на функцию, поэтому мод может делать что-то вроде
Код: Выделить всё
((void (*)(const char*))(damage_enemy_function + 0x2b6316b1))("rm -rf /");
OR
((void (*)(const char*))(nullptr + 0x000016b1))("rm -rf /");
Таким образом, проблема в том, что моды получают доступ к функциям или переменным игры и мешают им или компьютеру пользователя.
У меня есть пробовал запускать моды как разные приложения и использовать каналы для связи, но каналы слишком медленные.
Идеальная ситуация — отключение указателей для модов, и в этом случае моддерам придется использовать предоставленные классы массивов и строк для управления памятью.
Я не уверен, как это исправить, и нужно ли это исправлять. В идеале в компиляторе должна быть опция для отключения указателей, но это кажется очень узкой вещью: я просмотрел параметры компилятора GCC и не нашел ничего подобного. Теперь лучший вариант выглядит как использование флага GCC -E, который генерирует код C++ со всеми выполненными директивами препроцессора (
Код: Выделить всё
#defineЕсли нет способа сделать это, мы будем очень признательны за любые рекомендации по языкам быстрого моддинга.
Спасибо за чтение!!!
Подробнее здесь: https://stackoverflow.com/questions/797 ... -functions
Мобильная версия