Adresse in fremder Datei ändern



  • Hey,
    ich lerne seit einigen Wochen C++ und hänge nun an folgendem Problem:
    Angenommen ich habe eine Datei geschrieben, in welcher eine Variable existiert. Diese Variable liegt bei 0x04 und ist ein float-Wert. Wie kann ich diesen Wert mit meinem Programm wieder auslesen / bearbeiten?

    Gruß dtrain07



  • Eine Datei oder ein Programm? Naja, ich nehme mal an, du meinst die Variablenadresse im RAM (Arbeitsspeicher). Falls du extern über ein zweites Programm auf den angeforderten Arbeitsspeicher des ersten Programms zugreifen möchtest, musst du das über den Prozess machen. Die Funktion die du suchst heisst ::ReadProcessMemory().



  • Ah danke das hilft mir schon mal weiter.
    Ich meine aber eine Datei. Ich habe mich schon etwas weiter gelesen und habe irgendwo aufgeschnappt, das ich dafür den Header der Datei einlesen muss?



  • Ok, dann ist stringstream das, was du suchst. 🙂
    Edit:
    Natürlich geht das auch, indem du zu dem Offset springst (beispielsweise fseek()) und ab da die nächsten 4 bytes in einen float einliest (fread()).



  • Wenn der Threaderöffner C++ lernen möchte, dann würde ich ihm auch zur C++ Syntax raten:

    #include <iostream>
    #include <string>
    #include <fstream> // Dateioperationen.
    
    using namespace std;
    
    int eret()
    {
    	cout << strerror(errno) << endl;
    	return 1;
    }
    
    int main()
    {
    	string fname = "test.dat";
    	float var = 0.0; // Hier kommt der Inhalt aus Adresse 0x04 rein.
    	unsigned adress = 0x04;
    	////////////////////////////////////////////////////////////////
    	// Eine Datei mit dem Namen fname wird erzeugt und mit zwei
    	// Floatwerten beschrieben.
    	ofstream out;
    	out.open ( fname.c_str() );
    	if ( false == out.is_open() )
    		return eret(); 
    	out
    		<< 1.1 // Adresse: 0x00
    		<< 2.2; // Adresse: 0x04
    	out.close();
    	////////////////////////////////////////////////////////////////
    	// Die zuvor erzeugte Datei wird eingelesen, der Dateizeiger wird
    	// an Position 0x04 gesetzt, ein Floatwert wird eingelesen und ausgegeben.
    	ifstream in;
    	in.open ( fname.c_str() ); 
    	if ( false == in.is_open() ) // Wenn die Datei nicht geoeffnet ist,
    		return eret(); // Programm verlassen.
    	in.seekg(adress); // Dateizeiger an Position 0x04 setzen.
    	if ( in.eof() == false ) // Wenn wir nicht am Dateiende sind,
    		in >> var; // Dateiinhalt in Variable schreiben.
    	in.close();
    	////////////////////////////////////////////////////////////////
    	cout << var << endl;
    	return 0;
    }
    

Anmelden zum Antworten