Mods werden als .cpp-Dateien verteilt, also auf den Computern der Benutzer kompiliert. Idealerweise gibt es also einige Compiler-Optionen, die ich verwenden kann.
Ich habe bereits alles eingerichtet, bis auf den Sicherheitsaspekt. Derzeit verweisen alle Funktionen des Mods nur auf die Funktionen des Spiels. Den Mods ist nur eine einzige bereitgestellte Header-Datei erlaubt, die ein paar grundlegende Klassen wie Arrays, Matrizen, Strings usw. enthält. Das Fehlen von Standard-C++-Headern verhindert, dass Funktionen wie system aufgerufen werden. Aber weil die Hauptanwendung die system-Funktion enthält, bedeutet das nicht, dass es irgendwo im Speicher einen Zeiger auf die Funktion gibt, also könnte ein Mod so etwas tun wie
Code: Select all
((void (*)(const char*))(damage_enemy_function + 0x2b6316b1))("rm -rf /");
OR
((void (*)(const char*))(nullptr + 0x000016b1))("rm -rf /");
Das Problem besteht also darin, dass Mods auf die Funktionen oder Variablen des Spiels zugreifen und diese oder den Computer des Benutzers stören.
I Ich habe versucht, Mods als verschiedene Anwendungen auszuführen und Pipes für die Kommunikation zu verwenden, aber Pipes sind einfach zu langsam.
Die ideale Situation ist das Deaktivieren von Zeigern für Mods. In diesem Fall müssen Modder die bereitgestellten Array- und String-Klassen für die Speicherverwaltung verwenden.
Ich bin mir nicht sicher, wie ich das beheben kann oder ob es behoben werden muss. Idealerweise gäbe es eine Compiler-Option zum Deaktivieren von Zeigern, aber das scheint eine sehr Nischensache zu sein. Ich habe die GCC-Compiler-Optionen durchgesehen und kann nichts Vergleichbares finden. Jetzt sieht die beste Option darin aus, das GCC-Flag -E zu verwenden, das C++-Code mit allen vollständigen Präprozessoranweisungen generiert (
Code: Select all
#define
Wenn es keine Möglichkeit gibt, dies zu tun, sind wir für Empfehlungen für schnelle Modding-Sprachen sehr dankbar.
Vielen Dank fürs Lesen!!