VirtualQueryEx
-
hey,
ich versuche derzeit von einem anderen Programm eine Variable im RAM zu ändern. Und dies habe ich geschafft wenn ich mir die Adresse der Variable ausgeben lassen hab. Doch ich möchte jetzt einen Schritt weiter gehen und den Arbeitsspeicher nach einem Wert absuchen. Mir wurde hier im Forum empfohlen die Funktion VirtualQueryEx dazu zu verwenden. Könnte mir jemand anhand eines Beispiel Codes erklären wie man das macht. Ich habe schon bei MSDN nachgeschaut und habe es versucht zu verstehen jedoch stehen mir meine minderwertigen Englisch Kenntnisse hierbei im Weg (Ich arbeite daran).Ich weiß man sieht es hier nicht gerne, dass jemand nach Erklärungen mit Beispielcode gefragt wird, aber ich hoffe das mir jemand weiter helfen wird.
MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366907(v=vs.85).aspx
MEMORY_BASIC_INFORMATION: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366775(v=vs.85).aspx
Soweit bin ich gekommen bitte mal schauen ob es bis dahin richtig ist
#include <Windows.h> #include <iostream> #include <conio.h> using namespace std; int main() { unsigned int start=0, end; //Anfang/Ende Des belegten Speichers MEMORY_BASIC_INFORMATION info; //Ausgabe zur Überprüfung des Statuses HANDLE process=FindWindow(NULL,L"C:\\Users\\Heeiiigou\\documents\\visual studio 2010\\Projects\\Probe\\Debug\\Probe.exe"); if(!process) { cout<<"Konnte nicht gefunden werden"; } else { do { VirtualQueryEx(process, NULL, &info, sizeof(MEMORY_BASIC_INFORMATION)); if(start==0) { start=(unsigned)info.BaseAddress; } }while(info.State!=MEM_FREE); end=(unsigned)info.BaseAdress; } }
Ein Dankeschön schon einmal im Voraus.
-
Heeiiigou schrieb:
ich versuche derzeit von einem anderen Programm eine Variable im RAM zu ändern.
Und was willst du dann mit VirtualQueryEx ?
Die Funktion liefert dir ja nur folgende Informationen:
typedef struct _MEMORY_BASIC_INFORMATION { PVOID BaseAddress; PVOID AllocationBase; DWORD AllocationProtect; SIZE_T RegionSize; DWORD State; DWORD Protect; DWORD Type; } MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
Btw. ich geh mal davon aus das du den Virtual address space eines anderen Programmes verändern willst und nicht direkt den RAM.
Die Funktion die du suchst heisst: WriteProcessMemory
http://msdn.microsoft.com/en-us/library/windows/desktop/ms681674(v=vs.85).aspxAh, jetzt hab ich dein Problem erkannt: http://www.c-plusplus.net/forum/312847
Heeiiigou schrieb:
wie finde ich heraus, welche Adressen von dem jeweiligen Programm belegt sind?
Sowas findet man z.b. mit einem Debugger raus.
Anderes Beispiel:
PC-Spiele
Du hast z.b. 100 Lebenspunkte, jetzt springst du von einer Klippe und hast nur noch 80 Lebenspunkte.Diese Lebenspunkte liegen auch in einer Variable das Programm Cheat Engine eignet sich sehr gut dafür um die Adresse der Variable zu ermitteln.
Es kann aber auch sein das man nur die Adresse des Pointers findet der auf die Lebenspunkt Variable zeigt, dann muss man versuchen die Basis Adresse zu finden.
Lad dir das mal runter und arbeite die Tutorials durch, dann kannst du ja mit WriteProcessMemory versuchen die Cheat Engine Tutorial Programm zu manipulieren.
-
Du kannst unter Windows keinen Wert im RAM ändern. Höchstens im Virtual Memory...
-
Heutzutage ist das so...Keine Ahnung von nichts...Einfach nur jämmerlich... und wenns dann mal nicht läuft kommen sie angerannt. Ich würde mal sagen, lieber zuerst die Materie lernen als solcher Quark zu posten. Dann hättest Du schon lange ne elegantere Lösung gefunden.
sorry das sind harte Worte, aber nur so kommst Du auf nen grünen Zweig.
Dies ist essentiell
-> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366779(v=vs.85).aspx
-
Anstatt dich hier zu beschweren wie verkommen doch alles ist, solltest du mal darüber nachdenken wofür diese Forum ist. Es ist dazu da, das sich Experten austauschen können / diskutieren können, und um Anfängern helfen, sich in C++ einzuarbeiten. Ich versuche gerade zu verstehen wie der PC den Arbeitsspeicher verwendet und wie man unter Windows darauf zugreifen kann. Dazu kann ich keinen Zyniker gebrauchen der jammert und mich versucht darauf hinzuweißen, das ich Anfänger in diesem Thema bin, was ich auch ohne deine "Hilfe" gewusst hätte.
-
Heeiiigou schrieb:
Anstatt dich hier zu beschweren wie verkommen doch alles ist, solltest du mal darüber nachdenken wofür diese Forum ist. Es ist dazu da, das sich Experten austauschen können / diskutieren können, und um Anfängern helfen, sich in C++ einzuarbeiten. Ich versuche gerade zu verstehen wie der PC den Arbeitsspeicher verwendet und wie man unter Windows darauf zugreifen kann. Dazu kann ich keinen Zyniker gebrauchen der jammert und mich versucht darauf hinzuweißen, das ich Anfänger in diesem Thema bin, was ich auch ohne deine "Hilfe" gewusst hätte.
Okey, war nicht besonders nett, aber befasse Dich ausgiebig mit dem Thema, besonders der Link (weiter oben) wird Dir da sehr helfen.
-
-lowbyte- schrieb:
Heeiiigou schrieb:
Anstatt dich hier zu beschweren wie verkommen doch alles ist, solltest du mal darüber nachdenken wofür diese Forum ist. Es ist dazu da, das sich Experten austauschen können / diskutieren können, und um Anfängern helfen, sich in C++ einzuarbeiten. Ich versuche gerade zu verstehen wie der PC den Arbeitsspeicher verwendet und wie man unter Windows darauf zugreifen kann. Dazu kann ich keinen Zyniker gebrauchen der jammert und mich versucht darauf hinzuweißen, das ich Anfänger in diesem Thema bin, was ich auch ohne deine "Hilfe" gewusst hätte.
Okey, war nicht besonders nett, aber befasse Dich ausgiebig mit dem Thema, besonders der Link (weiter oben) wird Dir da sehr helfen.
Danke werde ich machen