2017-02-06 7 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을 반복해야합니다.

메모리가 부족합니다. 확실히 알고리즘을 재 설계해야합니다.

Hans Passant가 지적했듯이 파일 처리가 끝난 후에도 파일의 메모리를 비울 수 없으므로 메모리 누수가 발생합니다. C++은 가비지 수집되지 않습니다.

+0

C++은 가비지 수집되지 않지만 자동 메모리 관리를 수행하는 스마트 포인터 및 컨테이너 클래스를 가지고 있습니다. –

+0

나는 내 주요 기능으로 무료 (bFile)를 추가했다. 그러나 메모리가 유출되지 않도록 포인터 코드를 어떻게 편집해야하는지 잘 모르겠습니다. – Mervin

+0

지금은 작동하지만 더 큰 파일을 분석 할 때는 몇 초 정도 더 걸립니다. 어쨌든 고마워 :) – Mervin