DOS Header
주요 멤머 변수로는 e_magic 멤버면수와 e_Ifanew 멤버변수가 있습니다.
e_magic 멤버변수는 DOS Signature로 PE파일을 나타내는 첫 바이트입니다.
e_Ifanew 멤버변수는 NT Header가 시작되는 위치의 옵셋을 뜻합니다. e_Ifanew 값이 가리키는 위치에 NT Header 구조체가 존재해야합니다.

앞에 2바이트(e_magic변수)를 봤을 때
4D 5A가 먼저 적힘을 보아 little Endian을 통해, 시작점이 5A4D임을 확인할 수 있습니다.
e_Ifanew를 봤을때 NT_Header의 시작점이 0X000000F0임을 알 수 있습니다.
DOS Stub
DOS 환경에서 실행되는 코드를 가진 영역, 일종의 옵션으로 없어도 파일 실행에 문제는 없습니다.
DOS 모드에서 실행시 안내창 같은 역할을 합니다.

NT_Header가 000000F0 부터이므로 그 전까지가 DOS Stub입니다.
“This program cannot be run in Dos mode”라는 것을 보아
이 프로그램은 DOS 모드에서 실행될 수 없는 것을 볼 수 있습니다.
NT_Header
1개의 멤버변수와 2개의 구조체로 총 세개의 멤버(Signature, File Header, Optional Header)로 구성되어있습니다.

Signature에서 PE구조 파일이 명시된 것을 볼 수 있습니다.

구조체 IMAGE_FILE_HEADER은 파일의 개략적인 속성을 나타냅니다.
주요 멤버로는 Machine, Number of Section, Time Date Stamp 등등이 있습니다.

구조체 IMAGE_OPTIONAL_HEADER에는 파일 실행에 필요한 주요 정보를 저장합니다.
주요 멤버로는 Magic, MajorLinkerVersion, SizeOfCode, AddressOfEntryPoint 등등이 있습니다.

Section Header
각 섹션의 헤더들이 존재하며 section들은 메타데이터를 저장하고 메모리에 로드될대 필요한 정보를 포함하고 있습니다.

주요멤버로는 VirtualSize, VirtualAddress 등이 있습니다.
'리버싱' 카테고리의 다른 글
| [리버싱] Exercise: rev-basic-0 (0) | 2024.02.29 |
|---|---|
| [리버싱] IDA 사용해보기 (1) | 2024.02.21 |
| [리버싱]X86 Assembly (1) | 2024.02.17 |
| [리버싱]스택(Stack), 레지스터(Register), 스택 프레임(Stack Frame) (0) | 2024.02.03 |
| [리버싱] Binary & Analysis (0) | 2024.01.28 |