[GELÖST] Basis Adresse einer externen .dll finden



  • Abend erstmal! 😃

    Meine Grundidee sieht folgendermaßen aus:

    Ich möchte die Basis-Speicheradresse eines Moduls, also einer .dll Datei, das von einem fremden Prozess geladen wird, auslesen.

    Das fremde Programm habe ich geschrieben und dient nur zu Testzwecken.

    Folgende Daten sind bekannt:

    Der Name der .dll + Offset.
    Z.B:

    "meine_dll.dll" + 0x032
    

    Zugriff auf den Prozess habe ich bereits ich kann die Speicherbereiche auslesen, habe die nötige Rechte.

    Mit diversen anderen Programmen kann ich die Basis-Adresse der .dll auslesen, aber das ist nicht Sinn der Sache, deswegen möchte ich die Adresse der .dll selber in meinen Programm herausfinden.(Wenn es andere Programme können muss es ja irgendwie möglich sein^^)

    Nun zu meiner Frage:
    Ist es möglich die Basis Adresse einer Dynamic Link Library die von einen fremden Prozess geladen wurde herauszufinden?
    Habe mich schon grün und blau "gegoogelt" aber nichts gefunden wie ich die Basis Adresse einer .dll eines FREMDEN Prozesses herausfinde.

    Wäre für Hinweise, nützliche Links oder Methoden sehr dankbar!

    Danke schonmal 🙂



  • Lyie schrieb:

    Habe mich schon grün und blau "gegoogelt" ...

    Ah, du kannst selbst. Dann http://msdn.microsoft.com/en-us/library/windows/desktop/ms684218



  • Das Forum gefällt mir immer besser^^
    Das zweite mal das ich eine Frage hier gestellt habe und immer sofort Hilfe bekommen! Respekt, und das um 2:15 mitten in der Nacht 😃

    Hab mir mit deiner Referenz eine kleine Funktion gebastelt, falls es wen interessiert so siehts aus:

    DWORD GetModuleBase(LPSTR lpModuleName, DWORD dwProcessId)
        {
            MODULEENTRY32 lpModuleEntry = {0};
            HANDLE hSnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwProcessId );
            if(!hSnapShot)
            return NULL;
            lpModuleEntry.dwSize = sizeof(lpModuleEntry);
            BOOL bModule = Module32First( hSnapShot, &lpModuleEntry );
            while(bModule)
            {
                if(!strcmp(lpModuleEntry.szModule, lpModuleName ) )
                {
                    CloseHandle( hSnapShot );
                    return (DWORD)lpModuleEntry.modBaseAddr;
                }
                bModule = Module32Next( hSnapShot, &lpModuleEntry );
            }
            CloseHandle( hSnapShot );
            return NULL;
        };
    

    Danke nochmal jetzt kann ich beruhigt schlafen!


Anmelden zum Antworten