Frage

Ich habe gerade in niedrigen Niveau Programmierung bekommen (Lesen / Schreiben in den Speicher so etwas) und haben sich zu einem Problem führen ich nicht eine Antwort auf.

finden

Das Stück Information i von einer Adresse hat lesen mag, die im Speicher e, g geladen zu einer DLL relativ ist, ist es bei mydll.dll + 0x01234567. das Problem im ist mit, dass die DLL im Speicher bewegt sich aber die den gleichen Versatz bleibt. Gibt es trotzdem, die Lage von DLL in Speicher zu erfahren.

Ich bin derzeit versucht, dies in c # vorzugsweise zu tun, aber ich würde für die Hilfe in den meisten highish Sprachen dankbar sein.

War es hilfreich?

Lösung

Ich habe versucht, die Methode Rob Walker vorgeschlagen und konnte es nicht zu arbeiten (ich glaube, es hat nicht funktioniert, weil die DLL als Teil einer anderen ausführbaren geladen wurde, damit es nicht so leicht gefunden werden konnte).

Ich habe entdecken jedoch eine Lösung, die für mich so hier arbeitete sie ist:

i erstellt ein Objekt vom Typ Prozess

String appToHookTo = "applicationthatloadedthedll";
Process[] foundProcesses = Process.GetProcessesByName(appToHookTo)
ProcessModuleCollection modules = foundProcesses[0].Modules;
ProcessModule dllBaseAdressIWant = null;
foreach (ProcessModule i in modules) {
if (i.ModuleName == "nameofdlliwantbaseadressof") {
                    dllBaseAdressIWant = i;
                }
        }

Jetzt haben Sie das Modul können Sie einfach dllbaseAdressIWant.BaseAddress tun, den Wert zu erhalten.

Hope, das hilft

Andere Tipps

Von einer Win32-Perspektive müssen Sie die GetModuleHandle und GetModuleInformation Funktionen. Diese können Sie sehen das Modul mit Namen handhaben, und dann Abrufen von Informationen, einschließlich der Basisadresse über diesen Griff.

Es sollte einfach sein, diese APIs zu wickeln Wrapper verwendet die Standard-P / Invoke.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top