C++, Base Adress herausfinden, Befehl / Funktion
-
Hallo zusammen,
Ich bin auf der Suche nach einem Befehl / einer Funktion, mit deren Hilfe Ich die Base Adress feststellen kann.
Es wäre auch gut, wenn Ihr mir hierfür etwas Beispiel- Code geben könntet.
Da meine gesuchte Base Adress nicht statisch ist (also: *.exe + 0C, z.B.), muss Ich diese bei jedem Start meines Programmes bestimmen lassen.Leider brachte mir die Suche mit Hilfe von Google keine für mich brauchbaren Ergebnisse.
Vielen Dank für eure Hilfe und eure Zeit :).
-
Warum brauchst Du diese?
extern "C" LPVOID __ImageBase; HMODULE mDllMod = (HMODULE) __ImageBase;
-
1. Danke für deine schnelle Antwort.
2. Damit Ich den Wert der Adresse, welche Ich finden will ... mit der Hilfe der nicht statischen Base Adress ... nicht immer manuell abändern muss"HMODULE mDllMod = (HMODULE) __ImageBase;", diese Zeile funktioniert also für dll's und .exe's? Diese Frage stellt sich mir nur,
da als Ich diese Ziele "googelte", diese Lösung nur als Antwort für die Frage zur Suche der Base Adress unter dll's angegeben wurde.Ja, die Zeile funktioniert, jedoch weiß ich persöhnlich jetzt nichts damit anzufangen.
Allein diese Zeile gibt mir für "__ImageBase" den Wert 268 aus.
Jedoch sehe Ich keine Verbindung zu meiner .exe.Vielleicht kannst du mir das kurz erklären? Danke.
-
Wenn Dich Dich das HINSTANCE Handle interessiert.
Läuft aber alles vermutlich auf das selbe heraus.
-
Da hat ein "&" gefehlt, sorry...
extern "C" LPVOID __ImageBase; // Korrekt: HMODULE mDllMod = (HMODULE) &__ImageBase; int _tmain() { printf("ImageBase: 0x%p\n", &__ImageBase); printf("_tmain : 0x%p\n", &_tmain); }
-
Falls du die Base Adresse ermitteln willst von einer DLL die in einem fremden Prozess läuft dann schau dir mal diese Funktion an:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682489(v=vs.85).aspx
Der erste Parameter soll dann sein: TH32CS_SNAPMODULE
Der 2te Parameter bekommt die Process ID von dem fremden Programm.Die Process ID bekommst du auch mit CreateToolhelp32Snapshot