Ausführbare Dateien korrekt einlesen
-
Guten Tag!
Ich bin etwas irritiert.
Und zwar versuche ich eine exe-datei einzulesen und den inhalt auf dem Bildschirm anzuzeigen bzw. in eine variable einzulesen um den Inhalt zumbeispiel zu manipulieren.Und zwar so:
ifstream::pos_type size; char * memblock; int main () { // Datei einlesen, Größe bestimmt, in Variable einlesen ifstream file ("bla.exe", ios::in|ios::binary|ios::ate); if (file.is_open()) { size = file.tellg(); memblock = new char [size]; file.seekg (0, ios::beg); file.read (memblock, size); file.close(); cout << "the complete file content is in memory" << endl; } else { // Bei Fehler --> cout << "Unable to open file"; }
Wenn ich jetzt zb. eine .TXT- / .DAT-Datei oder ähnliches einlese, ja sogar wenn ich ne simple txt datei als exe abspeichere, kommt die komplette datei auf dem bildschirm wenn ich "memblock" ausgebe.
Außerdem wird der komplette inhalt auch wieder in eine neue Datei 1zu1 kopiert(mittels ofstream)
ofstream file2 ("blabla.txt", ios::out|ios::binary|ios::app); if (file2.is_open()) { file2.write(memblock, size); file2.close(); } else { // Bei Fehler --> cout << "Unable to write file"; }
So wenn ich das ganze mit einer ausführbaren Datei mache, kommt nur "MZé" auf dem Bildschirm...
!AUßERDEM! was mich hier an dieser stelle sehr verwundert, wird trotzdem der GESAMTE inhalt der datei in eine neue datei kopiert.
[Dateien sind identisch (md5-checksum überprüft)]Wieso wird aber bei jeder ausführbaren Datei nur "MZé" angezeigt?
Danke schoneinmal für die antworten
-
Was erwartest Du den bei einer ausführbaren Datei deren Inhalt binät ist?
Warum nimmst Du zum Kopieren nicht gleich CopyFile?
-
weil vieleicht nach "MZé" ne NULL kommt und die NULL beim String das Ende Anzeigt, ihn also Terminiert, wenn dann mußt du schon die Binären Nullen ersetzen durch Dezimale Nullen.