책을 보고 IAT를 공부하다가 IMAGE_IMPORT_DESCRIPTOR 구조체의 Offset을 찾는 과정에서 RVA to RAW 부분이 이해가 잘되지 않아 이 부분을 다시 정리하였다.
- 실습파일 : 계산기
- 실습환경 : Window 7 32bit
Data Directory의 구조이다. NT Header의 Optional Header에 포함되어 있으며 크키는 80h이다. – 16개(10h)* 8Byte
DataDirectory[0] : EXPORT Directory
DataDirectory[1] : IMPORT Directory
DataDirectory[2] : RESOUCE Directory
Data Directory[9] : TLS Directory
<Data Directory>
IMPORT Directory 인 DataDirectory[1]의 구조체의 VirtualAddress의 값은 00051AFC (IMAGE_IMPORT_DESCRIPTOR의 시작주소)이다.
RAV(00051AFC)를 이용하여 RAW(File Offset)을 계산하여야한다.
<RAW 계산하기>
- RAW = RVA – VirtualAddress + PointerToRawData
RVA : 00051AFC – IMAGE_IMPORT_DESCRIPTOR 구조체 배열의 시작 위치(IMPORT Directory의 RVA)
VA : 1000 – 위의 RVA(IMPORT Directory의 RVA) 값 속해 있는 Section의 시작위치 (.text Section Header RVA)
PointerToRawData : 400 – RVA가 속해있는 Section Header의 PointerToRawData(파일에서 섹션의 시작위치)
- RAW = 00051AFC – 1000 + 400
- RAW = 00050EFC
IMAGE_IMPORT_DESCRIPTOR 구조체의 Offset
<RAW 위치>