Announcement

Collapse
No announcement yet.

DLL entladen...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DLL entladen...

    Hallo,

    ich habe vor einiger Zeit schonmal eine ähnliche Frage gestellt: wie kann ich eine DLL aus einem anderen Programm entladen?

    Ich habe eine selbstgeschrieben DLL, die eigentlich nur von meinem Programm geladen werden soll, "kurioserweise" befindet sich aber auch noch eine Instanz in Explorer.exe. Wie bekomme ich sie da wieder heraus (ohne Neustart)?

    Eine vergleichbare Funktion wie FreeLibrary müsste an diesen Prozess (Explorer.exe) angewendet werden (vielleicht über ASM).

    Tschüss...

  • #2
    Also die einzige Möglichkeit, die ich funktionierend gesehen habe (ohne eine weitere DLL in den Zielprozeß zu injezieren) ist...<p>

    - Einen Thread im Zielprozeß anhalten (SuspendThread)<br>
    - Unterhalb des aktuellen Stacks Code schreiben, der<br>
    * die Register und Stackzeiger sichert<br>
    * FreeLibrary aufruft<br>
    * Register wiederherstellt<br>
    * zu dem ursprünglichen Code springt<br><br>
    - EIP des Zielthreads auf den Entladecode setzen (SetThreadContext)<br>
    - Thread fortsetzen<br>

    Nach diesem Prozedere ist der Counter der DLL um eines vermindert.<br>
    Wenn dieser Zähler auf 0 geht, wird die DLL entladen...<br>
    ...wenn sie also dreimal geladen war, dann muß es auch dreimal durchgeführt werden<br>
    Ich brauche wohl nicht darauf hinweisen, daß es nicht zu den guten Sitten gehört einem Prozeß eine DLL zu "klauen" es hat sicher einen Grund, das sie dort ist -- und wenn der Prozeß versucht sie zu verwendet endet dies in einem Disaster.

    Gruß Nic

    Comment


    • #3
      Du hast Pos

      Comment


      • #4
        Hallo Nico,

        danke ersteinmal, die Mail ist angekommen.<br>
        Ich werde mich sicherlich nochmal melden...

        Tschüss Ti

        Comment

        Working...
        X