Funktionen einer DLL nutzen



  • Hallo,

    wenn ich ein Spiel starte, nutzt dieses eine bestimmte .dll Datei. Ich möchte jetzt mit einem von mir geschrieben C++ Programm auf die DLL Datei zugreifen. Allerdings weiß ich nicht so wie das gehen soll. Also, die DLL Datei unterstützt verschiedene Funktionen und ich möchte diese gerne noch zusätzlich in mein C++ Programm "einbinden". Also nur auf den Prozess zugreifen und dort eine besimmte Funktion aufrufen.

    Es ist ein bisschen schlecht formuliert, ich weiß. Ich stelle es mal daher vereinfacht dar:

    1. Ich starte das Spiel -> Das Spiel bindet eine DLL Datei aus dessen Verzeichnis ein.

    2. Ich möchte in meinem C++ Programm (sofern das Spiel läuft und die DLL Datei eingebunden hat) nun auf diese DLL Datei zugreifen und eine bestimmte Funktion ansprechen.

    PS: Gibt es noch Möglichkeiten, dass ich alle Funktionen aus dieser DLL Datei debuggen kann, sprich, dass ich weiß, welche Funktion welchen Parameter mit welchem Typ unterstützt?

    Mit freundlichen Grüßen

    Slider_



  • Slider_ schrieb:

    PS: Gibt es noch Möglichkeiten, dass ich alle Funktionen aus dieser DLL Datei debuggen kann,

    Ja, das kann jeder Debugger.

    sprich, dass ich weiß, welche Funktion welchen Parameter mit welchem Typ unterstützt?

    Nein. Dazu brauchst du ne Dokumentation der DLL Funktionen und/oder passende Header Files.
    (Und idealerweise auch gleich noch ein passendes .lib File, aber zur Not kann man auch ohne .lib File arbeiten.)

    Was natürlich immer geht ist die DLL durch nen Disassembler zu jagen. Aber das ist richtig heavy, und erfordert viele Kenntnisse die du sicher nicht hast. Und vor allem: es ist so richtig richtig heavy 😉



  • Trotzdem ist das Vorhaben sinnlos, denn nur durch Einbinden einer DLL in sein eigenes Projekt kann man noch lange nicht auf die Daten des Spielprojekts zugreifen (egal ob das Spiel läuft oder nicht). Stichwort: process virtual address space, s.a. About Dynamic-Link Libraries.



  • Trotz was?

    Davon abgesehen: man kann seinen Code auch in den Prozess des Spiels injecten, und dann in diesem die Funktionen der vom Spiel genutzten DLL verwenden. Das ist mMn. auch viel einfacher hinzubekommen als das Interface einer "unbekannten" DLL rauszubekommen.

    Wobei... es gibt natürlich einen Fall wo's recht einfach ist: wenn's ne "C++ DLL" ist, die schöne decorated Names hat.


Anmelden zum Antworten