Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C++/CLI mit .NET ::  Wie Datei in den Speicher laden und die Adresse bekommen?     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
KratzKatz
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.09.2016
Beiträge: 8
Beitrag KratzKatz Mitglied 13:40:03 12.11.2016   Titel:   Wie Datei in den Speicher laden und die Adresse bekommen?            Zitieren

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:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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.
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4335
Beitrag Th69 Mitglied 15:07:34 12.11.2016   Titel:              Zitieren

Wenn du die Datei komplett in den Speicher laden möchtest, dann benutze
C++/CLI:
array<Byte>^ content = File::ReadAllBytes(filename);

PS: Und die Button-Click Zuweisung unten im Code ist überflüssig.
KratzKatz
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.09.2016
Beiträge: 8
Beitrag KratzKatz Mitglied 15:37:32 12.11.2016   Titel:              Zitieren

Th69 schrieb:
Wenn du die Datei komplett in den Speicher laden möchtest, dann benutze
C++/CLI:
array<Byte>^ content = File::ReadAllBytes(filename);


Muss ich File und filename mit irgendwas ersetzen?

Zitat:
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::Array<Platform::String^>^ argv)'
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 4335
Beitrag Th69 Mitglied 16:25:37 12.11.2016   Titel:              Zitieren

Da fehlt noch der Namespace (aber den gibt man hier im Forum selten an) - also entweder
C++/CLI:
array<Byte>^ content = System::IO::File::ReadAllBytes(filename);

oder aber oben in der Datei
C++/CLI:
using namespace System::IO;

Und selbstverständlich mußt du für 'filename' einen passenden Wert angeben. :confused:

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...


Zuletzt bearbeitet von Th69 am 16:27:37 12.11.2016, insgesamt 1-mal bearbeitet
KratzKatz
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.09.2016
Beiträge: 8
Beitrag KratzKatz Mitglied 17:20:33 12.11.2016   Titel:              Zitieren

Th69 schrieb:
Da fehlt noch der Namespace (aber den gibt man hier im Forum selten an) - also entweder
C++/CLI:
array<Byte>^ content = System::IO::File::ReadAllBytes(filename);

oder aber oben in der Datei
C++/CLI:
using namespace System::IO;

Und selbstverständlich mußt du für 'filename' einen passenden Wert angeben. :confused:

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 :) ).
C++ Forum :: C++/CLI mit .NET ::  Wie Datei in den Speicher laden und die Adresse bekommen?   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.