Exe Hexadezimal abspeichern
-
Hallo Leute,
Ich habe das Ziel eine Exe - Datei Hexadezimal abzuspeichern nur ich weiß nicht, wie ich den Inhalt Hexadezimal darstellen kann. Bis jetzt hab ichs folgender Weise probiert, was aber leider nicht geklappt hat:
#include <fstream> #include <string> using namespace std; int main() { ifstream In; ofstream Out; string Zeile; In.open( "Test,exe", ios::binary ); Out.open( "Output.txt", ios::app ); while( ! In.eof() ) { getline( In, Zeile ); for( unsigned int Count = 0; Count < Zeile.length(); Zeile++ ) { Out << hex << Zeile.at( Count ); } Out << "\n"; } }Das hat also wie gesagt nicht funktioniert gehabt, das resultat in der Output.txt war leider falsch. Weiß jemand, wie ich es sonst programmieren kann?
-
Ich würde mich gar nicht mit dem string behängen.
char ch; while( in.get(ch) ) Out << hex << ch;
-
Das hat leider nicht ganz geklappt. Das ganze wurde nicht Hexadezimal abgespeichert, sondern 1zu1 von der Exe kopiert. Mein jetziger Code:
#include <fstream> using namespace std; int main() { ifstream In; ofstream Out; char ch; In.open( "Test.exe", ios::binary ); Out.open( "Output.txt", ios::app ); while( In.get(ch) ) Out << hex << ch; }Auszug aus der Output.txt
MZ ÿÿ ¸ @ € º ´ Í!¸LÍ!This program cannot be run in DOS mode.
$ PE L ƒB|J à 8 R Š X € p @ ÔÂ ø .text DP R
P.data p V @ 0À.rdata 0+ € , X @ 0@.bss €V ° € @À.idata ø
„ @ 0À U‰åƒì‰]ø‹E1Û‰uü‹ 1ö‹ =‘ ÀwC= Àr[¾ Ç 1Ò‰TèÄ ƒøtz…ÀtÇ ÿлÿÿÿÿ‰Ø‹uü‹]ø‰ì] =” ÀtÂwJ=“ Àt´‰Ø‹uü‹]ø‰ì] = Àt[= ÀuÅÇ 1ö‰tè` ƒøtj…ÀtªÇ ÿÐëš=– ÀëÑÇ ¸ ‰Dè0 …ö„vÿÿÿèþ élÿÿÿÇ 1À‰Dè ƒøt0…À„RÿÿÿÇ ÿÐé?ÿÿÿÇ ¹ ‰LèÜ€ é%ÿÿÿÇ ¸ ‰Dè€ éÿÿÿ¶ ¼' U‰åSƒìÇ$ @ èí ƒìè…ü è€ý ÇEø Eø‰D¡ pD ǰD ‰DEô‰D¸ °D ‰Dèu€ ¡ûD …Àtd£°pD ‹€E …Ò…¡ ƒúàt¡ûD ‰D¡€E ‹@0‰è3€ ‹€E ƒúÀt(¡ûD ‰D¡€E ‹@P‰è€ ë èó ‹°pD ‰èžû ƒäðèvû èÉ ‹ ‰D¡ °D ‰D¡°D ‰èU2 ‰Ãè
-
Ein char wird immer als char ausgegeben. Der Manipulator hex wirkt nur auf zahlen. Zudem möchtest du wahrscheinlich immer zwei Zeichen pro Byte ausgeben, mit einer Null als Füllzeichen:
Out << setfill('0') << setw(2) << hex << (int)ch;
-
Ahh Ok danke. Das klappt schon ganz gut jetzt^^ Das einzigste Problem, das ich noch habe ist, dass das ganze nicht äuquivalent zu dem ist, was mir ein Hex-Editor ausgibt.
HexEditor:
4D5A90000300000004000000FFFF0000
Output.txt:
4d5affffff90000300000004000000ff
Es sind immer mal wieder solche "f" - Reihen in der Outputfile zu finden, die mir der Hex Editor nicht anzeigt. Weiß jemand wieso?
-
Hm, dass ist das blöde bei
signed char->int, hab ich vergessen.Out << setfill('0') << setw(2) << hex << (((int)ch) & 0xff);Das sollte jetzt nur das letzte Byte aus dem
intberücksichtigen.
-
Vielen Dank, es stimmt jetzt alles.