2017-02-06 4 views
0

В настоящее время мой код способен получить энтропию и смещение файлов из файлов PE размером менее 3 МБ, протестированных с помощью notepad.exe. Тем не менее, я получаю ошибки всякий раз, когда я пытаюсь проанализировать более крупный файл.Невозможно проанализировать файлы PE более определенного размера

Я не уверен, как я должен решить эту проблему. Но мой лектор сказал мне создать еще одну подобную функцию. Очень ценю, если кто-то может мне помочь в этом.

Ошибка показано в CLI:

Call to ReadFile() failed. 
Error Code: 998 

часть ошибки:

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

Код утечки возвращаемого байта *. Это не продолжается вечно, в конце концов malloc() возвращает NULL, чтобы указать, что он не может выделить больше памяти. Который вы не проверяете так неизбежно, ReadFile() будет кипеть. –

+0

Спасибо за ваш ответ. Могу ли я узнать, как мне это исправить? – Mervin

+1

Рассмотрите очевидные решения. Как вызов free(). И таргетинг на x64. –

ответ

2

Вы код ошибки декодирует на «Invalid доступ к ячейке памяти», и вы не проверять возвращаемое значение malloc, и даже если вам нужно было зациклиться на ReadFile, чтобы прочитать все это.

У вас закончилась память. Вам, безусловно, нужно перепроектировать ваш алгоритм.

И как указал Ханс Пассант, у вас есть утечка памяти, потому что вы никогда не освобождаете память файла, когда вы закончите с ним. C++ не собирает мусор.

+0

C++ не собирает мусор, но в нем есть классы интеллектуального указателя и контейнера, которые выполняют автоматическое управление памятью. –

+0

Я добавил в бесплатную (bFile) под свою основную функцию. Но я не уверен, как мне изменить код указателя, чтобы убедиться, что память не просочилась. – Mervin

+0

Теперь он работает, но при анализе больших файлов требуется несколько секунд. В любом случае спасибо :) – Mervin

Смежные вопросы