목록2020/08/03 (3)
Jiyong's STUDY
Machine은 어떤 CPU에서 이 파일이 실행될 수 있는지를 알려주는 역할을 한다. NumberOfSections는 섹션이 몇 개 있는지 알려주는 역할을 함. .text나 .rdata, .data와 같은 섹션을 말함. 보통 VS에서 MFC를 컴파일하면 .text, .rdata, .data, .rsrc로 4개의 섹션이 있고 NumberOfSection의 값도 4다. 어떠한 이유로 섹션의 수가 증가한다면 이 값도 증가한다. TimeDateStamp는 이 파일을 빌드한 날짜가 표시된다. obj 파일이 컴파일러를 통해 exe로 생성한 시간을 말한다. 델파이로 만든 파일은 이 값을 정상적으로 기록하지 않으므로 이 필드를 통해 빌드 시간을 확인할 수 없다. 이 필드는 4바이트를 차지하므로 0xA134F467와 같..
Signature은 "PE\0\0"를 표시하는 4바이트 값. 50 45 00 00이 된다. 그저 PE 파일임을 표시하는 용도 말고는 딱히 사용할 일이 없다. 하지만 요즘의 운영체제에서는 이 부분에 50450000이 아닌 다른 값이 들어오면 실행시키지 않는다. PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)((DWORD) pDosHeader + pDosHdr->e_lfanew); if (pNtHeader->Signature != IMAGE_NT_SIGNATURE) { printf("This is not PE format.\n); } 위와 같은 코드에서 이용된다. PE 파일이 맞는지 확인하는 코드이다.
IMAGE_DOS_HEADER에서 e_magic 필드는 현재 파일이 PE 파일인지 체크하는 역할만 한다. e_magic==5A4D(IMAGE_DOS_SIGNATURE)이라면 PE 파일이 맞다. IMAGE_DOS_SIGNATURE은 PE 파일의 가장 첫 번째 값이다. PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)lpFileBase; if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE) { printf("It's not PE File format.\n"); } 위와 같이 e_magic과 IMAGE_DOS_SIGNATURE을 비교하여 같은 지 확인할 때만 사용한다. 0x5A4D (메모리에선 4D 5A로, 리틀엔디언) e_lfanew는..