Gdzieś już wcześniej na tym forum wrzucałem linka do dokumentacji MS nt. nagłówka PE i standarfu COFF. Ogólnie to z tym RVA jest tak, że w PE znajduje się kilka ważnych informacji. Przede wszystkim baza całego obrazu - w przypadku plików EXE jest to zwykle 0x400000, baza kodu - adres RVA do którego dodajemy bazę obrazu i wiemy już w jakiej sekcji znajduje sie kod programu, baza danych - analogicznie do bazy kodu. Zaraz po tym ( prócz innych przydatnych informacji ) jest tabela sekcji i tabela katalogów. Z tabeli sekcji wyciągasz sekcję kodu i z wpisu tej sekcji bierzesz przesunięcie w pliku do sekcji danych. Mam nadzieje, że w miare jasno to wytłumaczyłem ;) W każdym razie dam poniżej mały example:
image base - 0x400000
code base - 0x001000
entry point - 0x001380
czyli RVA entry point będzie wynosił 0x401380
z tabeli sekcji wyciągamy RVA wszystkich wpisów. Okazuje się, że akurat wpis .text ma RVA 0x1000 i size 0x400 czyli nasz entry point miesci sie w sekcji .text. Sekcja .text w moim przypadku ma offset 200 czyli punkt startowy w progamie bedzize RVA entry point ( 0x401380 ) - code base - image base + offset_sekcji_text = 0x401380 - 0x400000 - 0x1000 + 0x200 = 0x580