PE FILE Format 0x01

Kail-KM
|2015. 1. 8. 03:23

PE FILE의 구조


  • PE Header

DOS Header

DOS stub

NT header

Section header

  • PE Body

코드

데이터

리소스






VA & RVA


VA : 프로세스 가상 메모리의 절대주소

RVA : ImageBase에서부터의 상대 주소를 말합니다.

RVA + ImageBase = VA


  • 파일에서는 offset 으로, 메모리에서는 VA(Virtual Address)로 위치를 표현합니다..
  • PE Header의 끝부분과 각 Section들의 끝에는 NULL padding 영역이 존재한다. 컴퓨터는 파일, 메모리, 네트워크 패킷등을 처리할때 효율을 높이기 위해 최소 기본 단위 개념을 사용하는데 PE파일에도 같은 개념이 적용됩니다.


PE Hedaer


DOS Header


typedef struct _IMAGE_DOS_HEADER {

WORD e_magic; //DOS signature : 4D5A("MZ")

...

...

LONG e_lfanew; //offset to NT header

}

    • 모든 PE 파일은 시작부분에 "MZ"가 필수적으로 존재
    •  e_lfanew가 가리키는 위치에 NT header의 OffSet이 표시

*NT header의 offset을 나타내는 E0는 Little-endian 방식이기에 000000E0로 읽어야 합니다.



DOS stub


Dos Header의 밑에 존재하며 필수적이지 않은 존재로 지워도 지장이 없습니다.

(사람에 비유하면 손톱과 같은 존재)

*붉게 표시된 부분16Bit 어셈블리명령어이기에  32bit 윈도우즈에서는 명령어가 실행되지 않는다

(PE파일로 인식되기에 무시된다.)

하지만 실행시킬수 있는 방법이 있는데 바로

*DOS환경에서 실행,

*DOS용 디버거를 이용해 실행가능(DOS EXE파일로 인식되기에)


즉,notepad.exe는 32bit용 PE파일이지만, DOS 환경에서 실행할 경우에도 같은 문자열이 출력이 된다.

다시말해 DOS환경에서는 16bit DOS용 코드가,Windows환경에서는 32bit Windows코드가 각각 실행된다.


**본 게시물은 http://www.reversecore.com 을 참고하여 복습용으로 옮겨 적거나 한 것이지 결코 제 머리에서 나온게 아님을 알려드립니다.  자세한건 Reversecore로 가시는게 더 좋습니다.


'Reversing > Theory' 카테고리의 다른 글

PE File Format 0x04  (0) 2015.01.13
IDA PRO 단축키  (0) 2015.01.13
PE FILE Format 0x03  (0) 2015.01.10
PE FILE Format 0x02  (0) 2015.01.09
C언어의 const 선언이 과연 리버싱에서 또한 값을 변경못하게끔 만들수 있는가?  (3) 2015.01.08