Различия в точках входа AddressOfEntryPoint, PE

Тема в разделе "WASM.BEGINNERS", создана пользователем Luzer, 8 сен 2009.

  1. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Мне казалось, что я это понимаю, но сейчас начинаю сомневаться)
    собсно, взял программу на делфи, открыл WinHEXом, нашел дворд AddressOfEntryPoint,
    взял программу на ассемблере(практически пустую, специально скомпилил), открыл WinHEXом, нашел дворд AddressOfEntryPoint
    сравниваю. Они разные :lol: D шутка)
    значит сравниваю... В первом случаи, RVA адрес указывает точно на начало кода в файле, а во втором, RVA адрес указыает почти на конец последней секции в файле(и по нему идут нули(что понятное дело не так)) Во время исполнения оба они попадают на начало инструкций(тех каких надо)
    Далее, скомпилил почти пустой код на VC++, там точно так же, как и с Делфи.

    Про смещения нашел информацию в статьях от Зеленого к красному, там сказано:
    Что получается, RVA находится в заголовке, значит оно должно быть ровно файловому смещению. А это происходит только в случаи с программой на ассемблере. Отсюда вопрос, Почему?:)
     
  2. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Алгоритм расчета файлового смещения очень просто:
    1. Ищем секцию, к которому принадлежит наш адрес (или RVA)
    2. Затем вычисляем разницу между нашим адресом (или RVA) и адресом (или RVA), с которого начинается данная секция
    3. К полученному значению из п.2 прибавляем физическое смещение этой секции файле

    P.S. Если адрес (или RVA) меньше чем адрес (или RVA) самой первой секции, то физическое смещение в файле равно RVA
     
  3. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    dermatolog, А если это RVA не в секции, как в моем случаи?
     
  4. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Luzer
    Чтобы это проверить рекомендую посчитать файловое смещение для любого адреса с помощью PETools (в нем кстати заодно посмотришь адрес EntryPoint).
     
  5. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Возможно, я чего-то не понимаю) Но если следовать Вашему алгоритму, то я уже на первом пункте "получаю эскепшен", т.к мой rva не находится в секции :)
     
  6. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Эти 3 пункта соответствуют формуле (2) ))
     
  7. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Воложил бы этот чудо экзешник на асме.
     
  8. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Вот например) это вс++
    Internet Explorer тоже имеет не равный файловому рва. что-то я запутался...
     
  9. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    елыпалыгнатьменянанары... Я запутался и тупанул. проблема есть у меня, вот только я теперь сам не пойму какая... сейчас все обдумаю. топик втопку