ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RVA to RAW 쉽게 계산하기
    ETC 2022. 9. 4. 12:16
    test


    파일에서는 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