Dll entladen und laden
-
Hallo zusammen,
ich nutze eine Funktion einer Dll. Wird diese Funktion n-Mal aufgerufen, so gibt es einen Buffer Overflow. Das ganze ist reproduzierbar.
Der Quellcode dieser dll ist nicht einsehbar und somit zu diesem Zeitpunkt auch nicht zu optimieren.
Gibt es eine Möglichkeit, die dll nach zum Beispiel (n-5)-Aufrufen zu entladen und wieder neu zu laden?
Danke & Grüße
Sam
-
Hallo,
informiere dich mal über die WinAPI-Funktionen "LoadLibrary", "FreeLibrary" und "GetProcAddress".
Zur Not kannst du ja im WinAPI-Forum nachfragen.
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Was soll die DLL machen und warum mehreres Laden und Entladen in einer Applikation? Da musst du für weitere Hilfestellung schon etwas mehr zur genauen Zielsetzung mitteilen. Wenn es in der fremden DLL einen Buffer-Overflow gibt stimmt wohl etwas in der DLL nicht, weil dort angeforderte Resourcen vielleicht nicht sauber gehandelt werden. Bleibt dann nur LoadLibrary und FreeLibrary einzusetzen.
-
Was nur geht, wenn explizit geladen wird!
-
Sam125 schrieb:
...
Normalerweise hat der Programmierer der DLL Mist gebaut, wenn eine Funktion nach mehrmaligem Aufrufen einen Buffer Overflow verursacht. Wahrscheinlich (ist aber nicht gesichert) hat er bei dem Aufbau der Funktion irgendwas übersehen, was du jetzt nutzen willst, und damit kommt die Anwendung nicht ganz klar.
DLLs ein- und entladen geht eigentlich relativ einfach, wenn es sich nicht um eine essentielle System-DLL oder so was handelt. Falls die DLL statisch gelinkt ist (damit meine ich die Angabe einer statischen LIB-Datei zur Kompilierzeit, die dafür sorgt, dass die DLL zur Laufzeit eingelesen werden kann), kannst du in den Linkeroptionen den LIB-Eintrag oder, wenn du den Befehl zum Einladen im Quellcode selbst definiert hast, einfach löschen und im Quellcode immer
LoadLibrary,FreeLibraryundGetProcAddressverwenden. Für eine dynamisch gelinkte DLL gilt dies auch, aber da musst du die statische Linkung der LIB-Datei der DLL nicht löschen - da nicht vorhanden.Dies sollte aber nur als Notlösung gelten. Generell solltest du der Quelle der DLL die Hölle heiß machen, soll heißen, Fehler berichten, genaue Umstände schildern und so weiter. Genau das, was du hier gemacht hast, nur am falschen Ort.