Вопрос про mov

Тема в разделе "WASM.BEGINNERS", создана пользователем NEG, 7 янв 2008.

  1. NEG

    NEG New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2005
    Сообщения:
    9
    Возник такой вопрос.
    Допустим есть программа на диске при ее дизассемблировании копирование из регистра в память происходит так
    mov dword ptr ds:[1314274c],eax
    А при дебаге та же строчка выглядит уже как
    mov dword ptr ds:[1020274c],eax
    Вопрос собственно в том почему меняется значение по которому записывается значение из eax тоесть почему 1314274c меняется на 1020274c?
     
  2. EvilPhreak

    EvilPhreak New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    154
    NEG
    Ну все просто. Если DLL (или EXE) грузится не по своему предпочтительному адресу, то лоадер windows использует директорию перемещаемых элементов для подстройки всех адресов. Т.е. если EXE грузить по адресу, который указан в опциональном заголовке, то все команды (и абсолютные адреса) останутся без изменений. Иначе, если есть секция .reloc, то они изпользуется чтобы отнимать от всех адресов дельту (разницу между предпочитаемым базовым адресом и фактическим). Как раз .reloc содержит записи - по одной на каждую команду с абсолютным адресом - куда надо прибавить дельту. Если ничего не понятно =), то просто прочитай статью про формат исполняемых файлов от Мэта Питрека.
     
  3. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    дык может быть самомодификация ещё
     
  4. EvilPhreak

    EvilPhreak New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    154
    rain
    Да, может, но маловероятно.
     
  5. NEG

    NEG New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2005
    Сообщения:
    9
    EvilPhreak
    Да все понял :). Просто ночь была, ничего не соображал :). Спасибо