Rufen Sie die Funktion in c++ - dll ohne header
Ich nennen möchte eine Methode aus einer dll, aber ich habe nicht die Quelle weder der header-Datei. Ich habe versucht, die dumpbin /exports", um den Namen der Methode, aber ich kann sich gefunden, die Methoden-Signatur?
Gibt es eine Möglichkeit um diese Methode aufzurufen?
Dank,
InformationsquelleAutor der Frage mileschet | 2009-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, um herauszufinden, eine C-Funktion die Signatur durch die Analyse der Beginn seiner Demontage. Die Funktion, die Argumente werden auf dem stack die Funktion "pops" Lesen Sie in umgekehrter Reihenfolge. Sie finden nicht den argument-Namen, aber Sie sollten in der Lage sein, um herauszufinden, die Anzahl und die Typen. Dinge können sich immer schwieriger mit dem Rückgabewert - es kann über 'eax' Registers oder über einen speziellen Zeiger an die Funktion übergeben, wie der Letzte pseudo-argument (auf dem stack).
InformationsquelleAutor der Antwort
Wenn die Funktion ist eine C++ ein, können Sie in der Lage sein, um die Ableitung der Funktion Signatur aus dem entstellten Namen. Dependency Walker ist ein tool, das dies für Sie tun. Allerdings, wenn die DLL wurde mit C linkage (Dependency Walker Ihnen sagen wird), dann sind Sie kein Glück.
InformationsquelleAutor der Antwort zdan
Der C++ - Sprache nicht wissen, etwas über dlls.
Ist dies unter Windows? Eine Möglichkeit wäre:
depends.exe
im Lieferumfang (Visual Studio)LoadLibrary()
zu bekommen, laden Sie diese dll-Datei (seien Sie vorsichtig über den Pfad)GetProcAddress()
um einen Zeiger auf die Funktion, die Sie anrufen möchtenFreeLibrary()
um den Griff zu entriegelnGibt es einige ähnlichen Mechanismus für *Nixen mit
dlopen
aber mein Gedächtnis beginnt zu Versagen, dass nach. Sowas nennt manobjdump
odernm
bekommen sollte, Sie begann mit der Inspektion der Funktion(en).InformationsquelleAutor der Antwort dirkgently
Als Sie Sie gefunden haben, den Export der Liste in eine DLL speichert nur Namen, keine Signaturen. Wenn Ihre DLL-Exporte von C-Funktionen, werden Sie wahrscheinlich haben, zu disassemblieren und reverse Engineering die Funktionen bestimmen, Signaturen. Aber C++ codiert die Signatur der Methode in der export-name. Dieser Prozess der Kombination der Methodenname und die Signatur genannt wird "name mangling". Diese Stackoverflow-Frage hat eine Referenz für die Bestimmung der Signatur der Methode von entstellten export-name.
Versuchen Sie die Kostenlose "Dependency Walker" (ein.k.ein. "hängt") - Dienstprogramm. Die "Undecorate C++ - Funktionen" - option sollte bestimmen die Signatur einer C++ - Methode.
InformationsquelleAutor der Antwort Peter Neubauer
Wenn Sie tatsächlich wissen oder stark vermuten, dass die Funktion da ist, Sie können dynamisch laden Sie die DLL mit loadLibrary und einen Zeiger auf die Funktion getProcAddress. Sehen MSDN
Beachten Sie, dass dies ist ein Handbuch, dynamisches laden der Bibliothek; Sie müssen noch wissen, die richtige Funktion Signatur anzeigen, um den Funktionszeiger um es verwenden zu können. AFAIK gibt es keine Möglichkeit die dll in einer Last-Zeit-Funktion und die Funktionen verwenden, die ohne eine header-Datei.
InformationsquelleAutor der Antwort Matt
Aufruf nicht-externe Funktionen ist eine großartige Möglichkeit, um Ihre Programm-Pause, Wann immer der 3rd-party-DLL aktualisiert wird.
Sagte, die undname Dienstprogramm kann auch hilfreich sein.
InformationsquelleAutor der Antwort HUAGHAGUAH