Section Header //각 Section의 속성을 정의한 것
앞에서 PE 파일은 code,data,resource 등이 각각의 section으로 저장이 된다했었습니다.
- code : 실행, 읽기 권한
- data : 비실행, 읽기, 쓰기
- resource : 비실행, 읽기
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 |