오늘은 기본적인 프로그램을 읽어 들이는 부분과 읽어들인 파일을 헥스로 표현하는 부분을 구현하였다. cpp파일을 main.cpp, loadPE.cpp, printPE.cpp 이렇게 새 개로 나누어서 함수를 작성하고 header.h 하나를 작성하였다.
헤더파일 안에 전역변수를 선언했었는데 자꾸만 이미 정의되어있는 변수라면서 에러를 마구 내뿜었었다. 검색을 해 보니 헤더파일에 선언을 할 때에는 extern 키워드를 앞에 붙여서 중복 선언이 방지되도록 해야 한다고 했다. 그렇게 오류를 해결하고 파일을 잘 읽어 들이고, 헥스로 출력하도록 했다.
파일을 읽어 들이는 것은 먼저 CreateFile 함수로 파일 객체를 생성하고, CreateFileMapping 함수로 파일 매핑 객체를 생성하고 난 뒤에 MapViewOfFile 함수로 메모리 내에 파일을 매핑시켜서 접근했다. 이렇게 하면 나중에 Hex로 한 번에 표현하기는 편한데 다시 공간을 할당하여 각 헤더와 섹션을 구분하여 저장하면 메모리 낭비가 좀 심할 것 같다. 그렇다고 파일 객체만 생성한 후에 ReadFile로 메모리에 필요한 부분만 저장하면 메모리 낭비는 적지만 한 번에 Hex로 표현하기에 어려움이 좀 있을 것 같다. 이 부분은 내일 IMAGE_DOS_HEADER를 저장하고 표현할 때 좀 더 생각해 봐야겠다.
시작 화면
메인 메뉴
View Hex 메뉴
Hex출력
내일은 IMAGE_DOS_HEADER 분석 부분과 DOS_Stub출력, 메모리에 파일을 올리는 방식을 바꿔야겠다.
'Project > PE Viewer' 카테고리의 다른 글
PE Viewer 개발 5일차 (0) | 2016.02.02 |
---|---|
PE Viewer 개발 4일차 (0) | 2016.01.27 |
PE Viewer 개발 3일차 (0) | 2016.01.24 |
PE Viewer 개발 2일차 (0) | 2016.01.21 |