Возник такой вопрос. Допустим есть программа на диске при ее дизассемблировании копирование из регистра в память происходит так mov dword ptr ds:[1314274c],eax А при дебаге та же строчка выглядит уже как mov dword ptr ds:[1020274c],eax Вопрос собственно в том почему меняется значение по которому записывается значение из eax тоесть почему 1314274c меняется на 1020274c?
NEG Ну все просто. Если DLL (или EXE) грузится не по своему предпочтительному адресу, то лоадер windows использует директорию перемещаемых элементов для подстройки всех адресов. Т.е. если EXE грузить по адресу, который указан в опциональном заголовке, то все команды (и абсолютные адреса) останутся без изменений. Иначе, если есть секция .reloc, то они изпользуется чтобы отнимать от всех адресов дельту (разницу между предпочитаемым базовым адресом и фактическим). Как раз .reloc содержит записи - по одной на каждую команду с абсолютным адресом - куда надо прибавить дельту. Если ничего не понятно =), то просто прочитай статью про формат исполняемых файлов от Мэта Питрека.