[C++]Speicheradresse direkt eingeben

Termy2007

Mitglied
Hi @ all!

Da ich mich inmoment mit Zeigern befasse und ich das Thema sehr interessant finde...mit dem ganzen Speicheradressen Zeug und so....habe ich mir gedacht, ich probier das einfach mal aus. Also: Ich wollte zwei Programme schreiben. Das erste erstellt zwei Variablen und sucht von diesen beiden die Speicheradressen heraus. Im zweiten Programm gibt man dann diese Adressen ein und kan so auf die Variablen den anderen Programms zugreifen.
Hier der (funktionierende) Code des ersten Programms:
Code:
// Speicheradressentest.cpp : main project file.

#include "stdafx.h"
using namespace System;
#include <iostream>
using namespace std;

int main()
{
	Console::Title = "Linksoft Speicheradressentestprogramm";
	cout << "Wilkommen zum Speicheradressentestprogramm von Linksoft!" << endl << endl;

	long double v_value;
	cout << "Variable erstellt!" << " Groesse: " << sizeof(v_value) << " Bytes (long double)" << endl;
	cout << "___________" << endl << endl << "Bitte einen Wert fuer die Variable eingeben (nur Zahlen!): ";
	cin >> v_value;
	cout << endl << "Eingegebener Wert: " << v_value << endl << "___________" << endl << endl;
	cout << "Die Speicheradresse lautet: " << &v_value << endl << "___________" << endl << endl;

	long double v_value2;
	cout << "Zweite Variable erstellt!" << " Groesse: " << sizeof(v_value2) << " Bytes (long double)" << endl;
	cout << "___________" << endl << endl << "Bitte einen Wert fuer die zweite Variable eingeben (nur Zahlen!): ";
	cin >> v_value2;
	cout << endl << "Eingegebener Wert: " << v_value2 << endl << "___________" << endl << endl;
	cout << "Die Speicheradresse lautet: " << &v_value2 << endl << "___________" << endl << endl;

	cout << "Programm laufen lassen, solange die Werte benoetigt werden! Enter zum Beenden!";
	cin.get();
	cin.get();
    return 0;
}

So....soweit so gut! Aber das mit der Eingabe funktioniert noch nicht so recht!
Hier der Code des zweiten (noch nicht funktionierenden) Programms:
Code:
// Speicheradressentest - changer.cpp : main project file.

#include "stdafx.h"
using namespace System;
#include <iostream>
using namespace std;

int main()
{
	Console::Title = "Linksoft Speicheradressentest - Changer";
	cout << "Willkommen zum Linksoft Speichenadressentest - Changer" << endl << endl;

	long double *p_v_value = NULL;
	long double *p_v_value2 = NULL;
	cout << "Zeiger erstellt!" << endl;
	cout << "Bitte Speicheradresse der ersten Variablen eingeben: ";
	cin >> p_v_value;
	cout << endl << "Der Wert der ersten Variable lautet: " << *p_v_value << endl << "_______________" << endl << endl;
	cout << "Bitte Speicheradresse der zweiten Variablen eingeben: ";
	cin >> p_v_value2;
    cout << endl << "Der Wert der zweiten Variable lautet: " << *p_v_value2 << endl << "_______________" << endl << endl;
	cout << "Enter zum Beenden!";


    cin.get();
	cin.get();
    return 0;
}

Ich hoffe, ihr könnt mir helfen!

Mfg
Termy2007
 
Hi.

Jedes Programm eines modernen Betriebssystems bekommt seinen eigenen Speicherraum zugeteilt. Es ist absichtlich nicht möglich, das ein Programm den Speicher eines anderen Programms einfach so lesen bzw. ändern kann. Versucht ein Programm auf einen anderen Speicherbereich zuzugreifen, wird ein Segmentationsfehler (SEGFAULT) ausgelöst und das Programm wird beendet.

Dein Test würde nur dann funktionieren wenn das Betriebssystem nicht im Protected Mode sondern im Real Mode ausgeführt werden würde. Siehe http://de.wikipedia.org/wiki/Protected_Mode

Gruß
 
Ok...
Und wie macht das dann ein Trainer?
Der muss ja auch Werte im RAM verändern...oder etwa nicht?

Mfg
Termy2007
 
...Du weißt nicht was ein Trainer ist?

Nagut....Ein Trainer ist ein Programm, das in Spielen sozusagen das cheaten übernimmt. Er verändert irgendwelche Daten...wie ich vermute im RAM und verhindert so z.B. dass deine Leben sinken. Auch wenn es in dem Spiel eigentlich keine Cheats gibt!

Mfg
Termy2007
 
...Du weißt nicht was ein Trainer ist?

Nagut....Ein Trainer ist ein Programm, das in Spielen sozusagen das cheaten übernimmt. Er verändert irgendwelche Daten...wie ich vermute im RAM und verhindert so z.B. dass deine Leben sinken. Auch wenn es in dem Spiel eigentlich keine Cheats gibt!
Aha, wieder was dazu gelernt. (Da ich keine Spiele spiele, hab ich mich damit noch nicht befasst.)

Aber ich sagte ja, dass es nicht "einfach so" möglich ist den Speicher von anderen Programmen zu lesen bzw. schreiben. D.h. es ist eben doch möglich - aber abhängig vom Betriebssystem.

Unter Windows gibt's die API Funktionen OpenProcess und ReadProcessMemory, WriteProcessMemory um auf den Speicher eines anderen Prozesses zuzugreifen.

Gruß
 

Neue Beiträge

Zurück