Wie Datei in den Speicher laden und die Adresse bekommen?
-
Hallo,
ich arbeite im Moment an einem Programm, um in einem sog. RAM Dump nach Pointer zu suchen. Dabei möchte ich erst einen solchen Dump in den Speicher laden und alle möglichen Pointer auslesen. Dabei soll die Adresse, des ersten Bytes des Dumps in eine Variable gespeichert werden.Habe schon ein wenig selber experimentiert und kann den Dump mehr oder weniger öffnen. Er wird aber nicht in den Speicher geladen:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) { System::IO::StreamReader ^sr = gcnew System::IO::StreamReader(openFileDialog1->FileName); MessageBox::Show("Dump loaded successfully"); sr->Close(); this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click); } }
Dass die Datei nicht geladen wird weiß ich, weil der belegte Platz im Arbeitsspeicher kaum zunimmt (obwohl der Dump über 900MB groß ist).
Den Code dafür fand ich bei einer Hilfe-Seite von Microsoft.
-
Wenn du die Datei komplett in den Speicher laden möchtest, dann benutze
array<Byte>^ content = File::ReadAllBytes(filename);
PS: Und die Button-Click Zuweisung unten im Code ist überflüssig.
-
Th69 schrieb:
Wenn du die Datei komplett in den Speicher laden möchtest, dann benutze
array<Byte>^ content = File::ReadAllBytes(filename);
Muss ich File und filename mit irgendwas ersetzen?
Error C3861 'ReadAllBytes': identifier not found
Error (active) name followed by '::' must be a class or namespace name
Error (active) identifier "filename" is undefined
Error C2653 'File': is not a class or namespace name
Error C2065 'filename': undeclared identifier
Warning C4829 Possibly incorrect parameters to function main. Consider 'int main(Platform::ArrayPlatform::String^^ argv)'
-
Da fehlt noch der Namespace (aber den gibt man hier im Forum selten an) - also entweder
array<Byte>^ content = System::IO::File::ReadAllBytes(filename);
oder aber oben in der Datei
using namespace System::IO;
Und selbstverständlich mußt du für 'filename' einen passenden Wert angeben.
Kennst du eigentlich schon den hier als "wichtig" markierten Artikel: Windows Forms und Visual C++ MACHT KEINEN SINN!?
Da du anscheinend noch Anfänger bist, rate ich dir von C++/CLI ab (dies ist nur was für die Interop-Programmierung zwischen nativem C++ und .NET).PPS: Ich habe jetzt erst gelesen, daß deine Dump-Datei 900MB groß ist - da macht es aber keinen Sinn diese ganz in den Speicher zu laden...
-
Th69 schrieb:
Da fehlt noch der Namespace (aber den gibt man hier im Forum selten an) - also entweder
array<Byte>^ content = System::IO::File::ReadAllBytes(filename);
oder aber oben in der Datei
using namespace System::IO;
Und selbstverständlich mußt du für 'filename' einen passenden Wert angeben.
Kennst du eigentlich schon den hier als "wichtig" markierten Artikel: Windows Forms und Visual C++ MACHT KEINEN SINN!?
Da du anscheinend noch Anfänger bist, rate ich dir von C++/CLI ab (dies ist nur was für die Interop-Programmierung zwischen nativem C++ und .NET).Funktioniert super, danke!
Wie kann ich nun die Adresse des ersten Bytes der geladenen Datei in eine Variable speichern?Den Artikel kenne ich und ich bin von CLI auch nicht gerade begeistert. Mit dem Programm möchte ich versuchen, mittels dem in der .asm Datei vorhandenen x64 Assembler-Code nach Pointer zu suchen, um in einem nützlichen Beispiel mit x64 Assembler vertrauter zu werden. (Auf ähnliche Art und Weise habe ich auch PPC Assembler gelernt ).