본문 바로가기

High Level Technique/Reversing

VA & RVA

PE 구조를 배우기 앞서서 VA와 RVA에 대해서 알아보도록 하겠습니다.



VA는 Virtual Address로 가상주소를 뜻하며, RVA는 Relative Virtual Address로 상대주소를 뜻합니다.


RVA는 상대주로라고 말했는데 ImageBase부터의 상대주소를 뜻합니다. 가상 메모리에서의 Offset 개념입니다.


Offset은 파일에서의 위치를 나타냅니다. 즉, RVA는 메모리에서의 위치라고 생각하시면 됩니다.



이렇게 글로만 봐서는 쉽게 이해하기 어렵습니다. 뒤에 이어지는 PE구조를 공부하시다 보면 쉽게 이해가 되실겁니다.








우리가 사용하는 시스템은 다음과 같이 메모리를 사용하게 됩니다.



물리주소를 보면 빨간 영역은 프로그램이 할당되어 사용되어지고 있는 영역입니다. 파란 영역은 사용되지 않고 있는 영역입니다.


만약 3Byte를 사용하는 프로그램이 추가적으로 실행이 되면 0x5 0x6 0xA에 할당됩니다. 하지만 메모리에 올라가는 프로그램은 연속적으로 있어야 프로그램이 오류가 발생하지 않고 실행이 됩니다.


쉽게 말하면 0x5 0x6의 메모리를 읽다가 0x7 0x8을 읽어버리면 전혀 다른 프로그램을 읽어버리게 되므로 오류가 발생하게 되는거죠.


그래서 생겨난것이 가상 주소입니다.


가상주소는 말 그대로 가상으로 존재하는 주소입니다.


프로그램이 메모리에 할당되는데 위 그림처럼 중간에 띄어지게 된다면 오류가 발생하니 가상 주소를 만들어서 이어주겠다는 겁니다.


그래서 가상주소에서는 0x1 ~ 0x3이 할당되어 프로그램을 실행하는데 전혀 오류가 나지 않게 됩니다.



이것이 바로 가상주소입니다.






PE구조를 공부하는데 있어서 필요한 것은 PE Header 내의 정보는 RVA 형태로 되어있는 것이 많은데, RVA로 해주어야 재배치(Relocation)이 발생해도 정상적으로 실행이 되기 때문입니다.


재배치는 가상 메모리의 특정 위치에 로딩될 때, 이미 그 위치에 다른 파일이 위치해있다면 재배치를 통해서 비어있는 주소로 위치하는 것을 말합니다.


이와 같은 이유로 만약 PE Header의 정보가 VA로 되어있다면 정상적으로 접근이 이루어지지 않게되기 때문에 RVA로 해주어야 재배치가 이루어져도 기준위치에 대한 상대주소가 변하지 않기 때문에 아무런 문제가 없게 됩니다.



따라서 다음과 같은 공식? 이 성립하게 됩니다.


ImageBase + RVA = VA



'High Level Technique > Reversing' 카테고리의 다른 글

PE  (0) 2015.07.09
RAV to RAW  (0) 2015.07.09
분석방법  (0) 2015.06.26
주요 단어  (0) 2015.06.26
Stack, Calling Conventions  (0) 2015.05.19