2017-02-06 2 views
0

Derzeit ist mein Code in der Lage, die Entropie und den Dateioffset von PE-Dateien zu erhalten, die weniger als 3 MB groß sind und mit notepad.exe getestet wurden. Ich erhalte jedoch immer dann Fehler, wenn ich eine größere Datei analysieren möchte.PE-Dateien können nicht mehr als bestimmte Größe analysiert werden

Ich bin mir nicht sicher, wie ich dieses Problem lösen sollte. Aber mein Dozent sagte mir, ich solle eine ähnliche Funktion schaffen. Wirklich zu schätzen, wenn mir jemand dabei helfen kann.

Fehler bei CLI angezeigt:

Call to ReadFile() failed. 
Error Code: 998 

Fehler Teil:

dwFileSize = GetFileSize(hFile, NULL); 
if (dwFileSize != INVALID_FILE_SIZE) 
{ 
    bFile = (byte*)malloc(dwFileSize); 
+1

Der Code leckt das zurückgegebene Byte *. Dies geht nicht für immer weiter, schließlich gibt malloc() NULL zurück, um anzuzeigen, dass es nicht mehr Speicher reservieren kann. Was Sie nicht so zwangsläufig überprüfen, ReadFile() wird umkippen. –

+0

Danke für Ihre Antwort. Darf ich wissen, wie ich das beheben soll? – Mervin

+1

Betrachten Sie die offensichtlichen Lösungen. Als würde ich kostenlos anrufen(). Und zielen auf x64. –

Antwort

2

Sie sind Fehlercode „um Speicherplatz ungültiger Zugriff“ dekodiert und Sie überprüfen nicht den Rückgabewert malloc, und selbst wenn Sie waren, müssen Sie auf ReadFile loeschen, um das Ganze in zu lesen.

Sie haben nicht genug Speicher. Sie müssen Ihren Algorithmus sicherlich neu gestalten.

Und wie Hans Passant darauf hingewiesen hat, haben Sie ein Speicherleck, weil Sie den Speicher der Datei nie freigeben, wenn Sie damit fertig sind. C++ ist kein Müll gesammelt.

+0

C++ ist nicht Müll gesammelt, aber es hat Smart-Pointer und Container-Klassen, die automatische Speicherverwaltung tun. –

+0

Ich habe in der freien (bFile) unter meiner Hauptfunktion hinzugefügt. Aber ich bin nicht sicher, wie ich meinen Zeigercode bearbeiten sollte, um sicherzustellen, dass Speicher nicht durchgesickert ist. – Mervin

+0

Es funktioniert jetzt, aber es dauert ein paar Sekunden länger, wenn größere Dateien analysiert werden. Trotzdem danke :) – Mervin

Verwandte Themen