PE FILE Format 0x03

Kail-KM
|2015. 1. 10. 01:37

Section Header                //각 Section의 속성을 정의한 것


앞에서 PE 파일은 code,data,resource 등이 각각의 section으로  저장이 된다했었습니다.

  • code : 실행, 읽기 권한
  • data : 비실행, 읽기, 쓰기
  • resource : 비실행, 읽기
           이러한 Secion 들의 속성을 나타내는 것이 바로 Section Header 입니다.


IMAGE_SECTION_HEADER


typedef struct _IMAGE_SECTION_HEADER {

...

UNION {

...

DWORD VirualSize;

}Misc;

DWORD VitualAddress;

DWORD SizeOfRawData;

DWORD PointerToRawData;

...

DWORD Characteristice;

} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;



  • VirtualSize : 메모리에서 섹션이 차지하는 크기
  • VirtualAddress : 메모리에서 섹션의 시작 주소 (RVA)
  • SizeOfRawData : 파일에서 섹션이 차지하는 크기
  • PointerToRawData: 파일에서 섹션의 시작위치
  • Characteristices: 섹션의 특징( bit OR)


                                     //VirtualAddress & PointerToRawData  //IMAGE_OPTIONAL_HEADER32에 정의된                                             SectionAlignment & FileAlignment에 맞게 결정이 된다.

Notepad.exe 의  Section Header를 보면 3개의 Section이 존재하는 것을 확인 할 수가 있습니다.





RVA to RAW                              //  각 섹션에서 메모리의 주소(RVA), 파일 옵셋(RAW)


PE파일이 메모리에 로딩되었을떄 각 섹션에서 메모리의 주소(RVA)와 파일옵셋(RAW)을 잘 매핑 할수 있어야한다.

이러한 매핑을 일반적으로 "RVA ro RAW"라 합니다.


How to?

1)RVA가 속해 있는 Section 찾기

2)비례식을 사용해서 파일 옵셋(RAW)을 계산한다,

   비례식

RAW -PointerToRawData = RVA - VirtualAddress

>>    RAW= RVA - VirtualAddress + PointerToRawData


//RVA to Raw 는 PE header를 공부할때 가장 기본이 되는 개념이므로 잘숙지해야한다.

  • RVA는 PE 파일이 메모리에 로딩되었을때의 메모리 주소를 의미하고, RAW는 PE 파일이 로딩되기 전의 File Offset을 의미

  • 즉, RVA to RAW는 PE File의 각 Section이 Memory에 로딩되기 전의 File Offset과 메모리에 로딩된 후의 위치주소를 매칭하는 것이다.



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

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

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