Kompilieren einer gemeinsam genutzten/dynamischen C++-Bibliothek, sodass sie nicht auf Funktionen oder Variablen des HauC++

Programme in C++. Entwicklerforum
Anonymous
 Kompilieren einer gemeinsam genutzten/dynamischen C++-Bibliothek, sodass sie nicht auf Funktionen oder Variablen des Hau

Post by Anonymous »

Ich entwickle ein Videospiel in C++ und Vulkan mit Modding-Unterstützung. Ich möchte wirklich, dass das Modding über C++ erfolgt (das Spiel ist ziemlich gut optimiert, daher würde ich mir wirklich wünschen, dass das Modding auch optimiert wird).
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 /");
In diesen Szenarien verweisen Damage_enemy + 0x2b6316b1 und nullptr + 0x000016b1 auf die Systemfunktion, die jemand finden könnte.
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
, #include, ect...), dann analysieren und sicherstellen, dass keine Zeiger verwendet werden, aber das scheint äußerst schwierig zu sein.
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!!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post