[리버싱 핵심원리 study] 13장 PE File Format (2)
[리버싱 핵심원리 study] 13장 PE File Format (1)
PE(Portable Executable) 파일은 Windows 운영체제에서 사용되는 실행 파일 형식이다. 기존 UNIX의 COEF(Common Object File Format)을 기반으로 Microsoft에서 만들었으며, 문자 그대로 이식성을 좋게 하려는 의..
maple19out.tistory.com
- RVA to RAW
Section Header를 잘 이해했다면, PE 파일이 메모리에 로딩되었을 때 각 섹션에서 메모리의 주소와 파일 offset을 잘 매핑할 수 있어야 한다. 이러한 매핑 과정을 'RVA to RAW'라고 부른다. 기본적인 방법은 다음과 같다.
1. RVA가 속해 있는 section을 찾는다.
2. 간단한 비례식을 사용해서 파일 offset(RAW)를 계산한다.
비례식은 다음과 같다.
RAW - PointerToRawData = RVA - VirtualAddress
RAW = RVA - VirtualAddress + PointerToRawData
간단한 예제 몇 가지를 통해 계산을 해보자.
Q1. RVA = 5000일 때, File offset?
5000은 text Section에 해당하며 해당 섹션의 Virtual Address는 1000이므로
RAW = 5000(RVA) - 1000(VirtualAddress) + 400(PointerToRawData) = 4400
Q2. RVA = 13314일 때, File offset?
13314는 rsrc Section에 해당하며 해당 섹션의 Virtual Address는 9000이므로
RAW = 13314(RVA) - B000(VA) + 8400(PointerToRawData) = 10714
Q3. RVA = ABA8일 때, File offset?
data Section이지만 비례식을 통해 계산하면 RAW가 rsrc 섹션에 해당하는 값으로 결과가 나온다. 이 경우에 RAW 값은 정의될 수 없다.