Get the base address of a process - Problem
-
Hallo zusammen,
folgendes Problem: meine Funktion, welche mir die base address eines Prozesses liefern soll,
funktioniert nicht zu 100% (nur bei Prozessen, welche eine base address von 0x400000 besitzen).Hier der Code:
DWORD get_base_address(DWORD id, TCHAR *process) { HANDLE handle = NULL; handle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, id); if(!handle) { cout << "Can't get handle (CreateToolhelp32Snapshot(*))." << endl; cin.get(); return 0; } MODULEENTRY32 moduleentry32; moduleentry32.dwSize = sizeof(MODULEENTRY32); if(Module32First(handle, &moduleentry32)) { do { if(!_tcscmp(process, moduleentry32.szModule)) { CloseHandle(handle); return (DWORD)moduleentry32.modBaseAddr; } } while(Module32Next(handle, &moduleentry32)); } CloseHandle(handle); return 0; }
Frage: Warum funktioniert, wie bereits beschrieben, meine Funktion nicht immer richtig?
Ich hoffe, Ihr könnt mir hierbei helfen / eine Lösung vorschlagen.
-
Du bist definitiv im falschen Forum, ein Mod wird dich verschieben.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) 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.
-
=0x500+0x30+0x9 schrieb:
folgendes Problem: meine Funktion, welche mir die base address eines Prozesses liefern soll,
funktioniert nicht zu 100% (nur bei Prozessen, welche eine base address von 0x400000 besitzen).Woher weißt du denn, dass es nicht richtig funktioniert?
0x400000 ist auf x32 System die Standard Adresse für das Module der EXE - von daher nicht Überraschen, das die Adresse für alle Prozesse gleich ist.
(BTW: Es ist hoffentlich klar, das: Module != Process)
-
Ja, das ist mir klar.
Warum Ich weiß das es nicht zu 100% funktioniert?
Entweder Ich erhalte als Ergebnis meiner Funktion 0x400000 oder 0.Außerdem sah Ich meine Funktion in abgewandelter From bereits in anderen Foren,
wo auch gesagt wurde, das diese zu 100% funktionieren würde
(Beispiel: Spiel - Hearts, Rückgabewert: 0 und hier bin Ich mir sicher,
das 0x400000 nicht richtig wäre).
-
Um die Basisadresse eines Prozesses zu finden kann man viel einfacher vorgehen:
http://blog.m-ri.de/index.php/2007/12/12/die-unsitte-immer-getmodulehandlenull-fuer-hinstance-in-createwindow-und-registerclass-zu-verwenden/
-
Vielen Dank hiefür, jedoch beantwortet das nicht mein Problem,
mit der obig genannten Funktion.
-
Gib mal sämtliche Module aus und prüfe, ob "process"(Name) überhaupt in einem der "moduleentry32.szModule" vorkommt.