-
RVA to RAW 쉽게 계산하기ETC 2022. 9. 4. 12:16test
파일에서는 Offset로 위치를 표현하고 메모리에서는 address(VA) 로 위치를 표현하는데
위의사진에서는 파일과 메모리에서의 위치가 차이가난다.
그래서 메모리에서의 값을 확인한후 그위치를 수정하고자할때는 그위치의
Offset값을 구하여만 한다.
RAW = RVA - VirtualAddress(VA) + PointerToRawData
RAW은 파일에서의 주소 이다.
RVA 는 메모리에서의 주소이다
VirtualAddress(VA) 은 메모리에서의 섹션시작위치이다.
PointerToRawData 은 파일에서의 섹션 시작위치이다위에서 RVA는 VA - ImageBase 로 구할수있는데 여기서 ImageBase 는 위에 사진에서의 메모리 시작 address를 보면
0부터 시작안하고 010000000 로시작하는데 이때 01000000이 ImageBase 이다.
즉 시작 점에서의 RVA는 0인 것이다.
이제 문제로 RVA = 300 일때 offset(RAW) 를 구해보자.
RVA 3000 이면 위의 메모리 에서 섹션을 보면.test섹션 에 포함되어있다는걸 쉽게할수있다
=01001000 인데 왜 포함되냐 라고생각한다면 여기서 ImageBase를 빼서 생각해야한다.
VirtualAddress(VA) 은 메모리에서의 섹션 시작 위치이니
.test의 섹션시작위치를 보면된다 즉 1000이다.
PointerToRawData 은 파일에서의 섹션 시작위치이니
.test의 섹션시작위치를보면400이라는걸 알수있다. 파일에서는 offset 은 ImageBase를 포함하고있지않으니 그대로 보면된다.
이제 식을 대입해보면
RAW = RVA - VirtualAddress(VA) + PointerToRawData
-----> 3000(RVA) - 1000(VA) + 400(PointerToRawData) = 2400(RAW)
가 된다.
이미지 출처: 리버스코어'ETC' 카테고리의 다른 글
그놈의 REST 한 API (0) 2022.09.27 HashMap 내용물 이해하기 (0) 2022.09.10 AWS 서버 아키텍처 구축하기 (0) 2022.09.03 Ubuntu 를 Jupyter Notebook 로 접속하기 (0) 2020.12.13 [C#] TDD (단위테스트) 작성하기 (0) 2020.12.07