Здравствуйте, мучал пару часов одну дллку, настало время для сохранения, но не тут то было. По нажатию правой кнопки в списке не появляется Copy to Executable... Пробовал сохранять память и восстанавливать дллку через LordPE, не получается, не грузит у меня дебаггер свежеиспеченную дллку... Как мне быть?
Так нельзя же просто взять память и сохранить. Надо снова привести все рва к смещениям и т.д. Надо делать именно дамп образа, а не просто сохранения памяти. Лорд РЕ вроде так умеет
tagegor, В памяти DLL настроена на реальный адрес, по которому она загружена, в отличие от IMAGE_OPTIONAL_HEADER.ImageBase (т.е. фиксапы уже отработали). Если повезёт, им будет нечего делать. В противном случае надо отмотать всё взад (правда, приводить надо не RVA к смещениям, а скорее наоборот). Можно найти свободное место в адресном постранстве и перебазировать исходную .DLL с помощью editbin /rebase, чтобы не было нестыковки.
да нет, как раз рва к смещениям в памяти-то секции находятся по виртуальным адресам (рва + база), а на диске по физическим смещениям, которые не всегда равны рва
MSoft, Я имел в виду то, что пофикшеный dword надо откорректировать на разницу между базой дампа и файла. В обоих случаях (и в дампе, и в PE) этот dword является VA, а так как в PE часто используется термин RVA, я и употребил "скорее наоборот". В чистом виде RVA нужны для структур самого PE (импорт/экспорт/ресурсы/etc.), в коде/данных самой программы они используются редко. То, что смещение в файле обычно не совпадает с RVA — естественно. Хотя для дампа — скорее наоборот.