Speicheradresse mit neuem Wert füllen

glnklein

Mitglied
hallo , also erstmal ich bin noch TOTALER anfänger mit c++ und bin gerade erst dabei die ganzen funktionen zu lernen ,

ich bin nicht so der Bücherwurm sondern eher Learning by Doing hab so auch schon einiges gelernt nur zu diesem thema oder auch zu c++ algemein muss
man leider nach guten hilfen viel suchen , (PHP war da einfacher)


nun meine frage

Ich habe einen Speicheradresse sagen wir mal 0x07250340 diese hat jetzt den wert 5 nun möchte ich mit c++ den wert ändern sagen wir einfach in 6 .

kann mir einer kurz erklären oder zeigen wie das geht ich habe schon einige tut durchgeschaut aber leider keine anleitung gefunden die wirklich so ein thema behandelt ,

danke
 
Hast du ein Problem mit der Syntax?

Die direkte Version:

unsigned char* pPointer = 0x07250340;
*pPointer = 6;


Allerdings sind die Zeiten andere geworden. Du kannst nicht wild im Speicher rumpörkeln. Der Bereich, auf den der Pointer zeigt, ist besser deiner und beschreibbar. Sonst musst du mit lustigen Effekten wie Abstürzen rechnen.
 
ja irgentwie stimt mit dem syntax was nicht wen ich deinen benutze

Code:
#include<iostream>


    
    unsigned char* pPointer = 0x07250340;
*pPointer = 6;

bekomme ich folgende fehler

zeile 5 C:\Dev-Cpp\Unbenannt1.cpp invalid conversion from `int' to `unsigned char*'
zeile 6 C:\Dev-Cpp\Unbenannt1.cpp expected constructor, destructor, or type conversion before '=' token
zeile 6 C:\Dev-Cpp\Unbenannt1.cpp expected `,' or `;' before '=' token



ich dachte es geht so :


Code:
#include<iostream>
   

    int main()
    {
     int *i_ptr = (int*)(0x07250340);
*i_ptr = 5;
    }

doch das geht auch nicht da stürzt es nur ab

weist du was da falsch ist ?
 
ich habso gemacht


Code:
#include<iostream>
   

    int main()
    {
     int *i_ptr = (int*)(0x07250340);
     system("PAUSE");
*i_ptr = 5;

    };

und bekomme wieder einen absturz die adresse ist aber richtig

bildabsturz:
ptxp8ldddrbf.jpg
 
Was heißt das, die Adresse ist richtig?
Was soll denn das für eine Adresse sein?

Wie Endurion schon gesagt hat, verwindert Windows, dass du einfach so in den Speicher von anderen Programmen etc hineinschreibst.
Du kannst nur auf Speicher zugreifen, der dir auch gehört
 
äHHHHHHHHHH WAS mir gehören was meints du den damit

also das program was diesen speicher benutz ist auf meinem rechner drauf und ist gestartet wenn du das meinst

und wenn ich mir den speicherbereich ansehe hat er derzeit einen wert von 5 und nun mmöchte ich den bereich ersetzen durch einen wertt von 6 das ist was ich vor habe fang ich das falsch an ?
 
Damit meine ich, der Speicherbereich, den du ändern willst,
muss nicht nur in deinem Computer sein, sondern auch zu dem Programm gehören, das ihn ändern will
In DOS-Zeiten hat man zwar den genzen RAM nach belieben beschreiben können, aber das ist bei der heutigen Virenverbreitung ziemlich undenkbar.
Windows hat inzwischen einen Schutzmechanismus, das ein Programm eben nur seinen eigenen, zugeteilten Speicherbereich bearbeiten darf.
 
ok
kann es sein das ich mich dan falsch ausgedrückt habe dann nochmal von vorne

also ich habe das spiel solitär und die adresse 0x0045A394 ist bei mir für den punktestand zuständig dieser ist jetzt 10
nun möchte ich c++ den wert auf 300 ändern , also das ich 300 punkte habe , das müste doch gehen oder und wen ja wie ,weis das jemand

könnte mir da jemand einen kleinen code geben das ich das mal testen kann ?
 
So also ich hab es nun geschaft zumindest funktioniert es

mein Code

Code:
#include <stdio.h>
#include <iostream>

using namespace std;

int main()
{            
    cout << "neuer wert? ";
    int wert;
    cin>>wert;     
    
   
   
 

                 
    cout << "\nwert schreiben ?\n\n0=Nein 1=JA ";
    int eingabe;
    cin>>eingabe;     
    if(eingabe==0)
    {
                  return 0;
    }
  
    HWND window = NULL;
    while(window == NULL)
    {
                  Sleep(100);
                  window = FindWindow(NULL, "Solitär");
    }
    DWORD prozess;
    GetWindowThreadProcessId(window, &prozess);
    HANDLE handle;
    handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, prozess);
    DWORD puffer = NULL;
  
         switch(eingabe)
    {
    case 1:
        WriteProcessMemory(handle,(void*)(0x0045A394),&wert,6,&puffer);

        break;
  
 
     
    CloseHandle(handle);  
    
    
} 
return 0;   
}


könnte einer der ahnung hat mal drüberschauen und mir sagen ob das so alles sauber ist oder ob fehler drin sind ?

danke
 

Neue Beiträge

Zurück