Компиляция общей/динамической библиотеки C++ таким образом, чтобы она не могла получить доступ к каким-либо функциям илиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Компиляция общей/динамической библиотеки C++ таким образом, чтобы она не могла получить доступ к каким-либо функциям или

Сообщение Anonymous »

Я разрабатываю видеоигру на C++ и Vulkan с поддержкой моддинга, мне бы очень хотелось, чтобы моддинг выполнялся через C++ (игра достаточно хорошо оптимизирована, поэтому мне бы очень хотелось, чтобы моддинг тоже был оптимизирован).
У меня уже все настроено, за исключением аспекта безопасности, в настоящее время все функции мода просто ссылаются на функции игры. Модам разрешен только один предоставленный заголовочный файл, который содержит несколько основных классов, таких как массивы, матрицы, строки и т. д., не включающий никаких стандартных заголовков C++, что предотвращает вызов таких функций, как system, но поскольку основное приложение включает функцию system, не означает ли это, что где-то в памяти есть указатель на функцию, поэтому мод может делать что-то вроде

Код: Выделить всё

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

Подробнее здесь: https://stackoverflow.com/questions/797 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»