tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
1021
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Termy2007
    Termy2007 Termy2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Lauda (ganz im Norden von Baden-Württemberg)
    Beiträge
    86
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    // 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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    // 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
     
    Alles ist einfach wenn man es mal kann..

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    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ß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Avatar von Termy2007
    Termy2007 Termy2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Lauda (ganz im Norden von Baden-Württemberg)
    Beiträge
    86
    Ok...
    Und wie macht das dann ein Trainer?
    Der muss ja auch Werte im RAM verändern...oder etwa nicht?

    Mfg
    Termy2007
     
    Alles ist einfach wenn man es mal kann..

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Termy2007 Beitrag anzeigen
    Ok...
    Und wie macht das dann ein Trainer?
    Der muss ja auch Werte im RAM verändern...oder etwa nicht?
    Was ist denn ein Trainer?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Avatar von Termy2007
    Termy2007 Termy2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Lauda (ganz im Norden von Baden-Württemberg)
    Beiträge
    86
    ...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
     
    Alles ist einfach wenn man es mal kann..

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Termy2007 Beitrag anzeigen
    ...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ß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    Avatar von Termy2007
    Termy2007 Termy2007 ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    Lauda (ganz im Norden von Baden-Württemberg)
    Beiträge
    86
    Aha!
    Kannst du mal ein Beispiel machen?

    Mfg
    Termy2007
     
    Alles ist einfach wenn man es mal kann..

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Termy2007 Beitrag anzeigen
    Aha!
    Kannst du mal ein Beispiel machen?
    Nee, dazu hab ich grad keine Zeit - und dadurch das ich kein Windows benutze auch keine Motivation.

    Such einfach bei Google, da gibt's genug Beispiele (auch direkt im Hinblick auf Trainer-Programmierung).

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. C++ Speicheradresse finden
    Von Renegaade im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 26.08.10, 14:43
  2. Speicheradresse mit neuem Wert füllen
    Von glnklein im Forum C/C++
    Antworten: 76
    Letzter Beitrag: 11.06.10, 15:23
  3. speicheradresse einer datei abfragen
    Von blacksb im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 21.08.05, 19:53