2017-02-06 67 views
0

目前,我的代碼能夠獲得小於3MB的PE文件的熵和文件偏移量,並使用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

你是錯誤代碼解碼爲「對內存位置的訪問無效」和你沒有檢查返回值malloc,即使你需要在ReadFile上循環來讀取整個事物。

你用完了內存。你當然需要重新設計你的算法。

正如漢斯帕斯坦指出的那樣,你有內存泄漏,因爲當你完成它時,你永遠不會釋放文件的內存。 C++不是垃圾收集。

+0

C++不是垃圾收集,但它確實有智能指針和容器類來進行自動內存管理。 –

+0

我已經在我的主要功能下的免費(bFile)中添加了。但我不知道如何編輯我的指針代碼以確保內存不泄漏。 – Mervin

+0

它現在可以工作,但分析更大的文件時需要幾秒鐘的時間。不管怎麼說,多謝拉 :) – Mervin

相關問題