Jak OFFSET w pliku Exe ma sie do RVA

0

Witam

Kolejne pytanie z anatomii pliku Exe. Przegryzalem sie ostatnio przez program calc.exe, tzn przegladalem go pod hex edytorem, z naglowka wynikalo ze RVA entrypoint to 12475h, ale jak sie pozniej okazalo entry-point opisany w nagowku nie ma nic wspolnego z wejsciem do programu wzgledem poczatku pliku wykonywalnego.

Entry-Point w Naglowku (RVA): 12475h
Rzeczywiste polozenie Entry-Point wzgledem poczatku pliku: 11875h

Skad te rozbieznosci i jak przeliczac OFFSETY wzgledem poczatku pliku na RVA

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1