Такой вопрос: Изменяет ли сам код загрузчик в РЕ файле при его загрузке? Или только таблицы импорта/експорта ? Сталкивался просто с броблемой что когда например взять Kernel32 и код который у нее в EntryPoint стоит перезаписать на свой то часть инструкций после загрузкии ее в память изменяеться. А хочу сделать вот в своей программе проверку(через сравнение с оригинальными длл на диске) на то не перехвачены ли ее функции, и если что востанавливать их. А так как загрузчик немного модифицирует это данные то мне это немного будет мешать..
Вероятно, речь идет о релокациях? Например, в инструкциях типа 'mov reg, [disp]' меняется disp, если образ был перемещен.
Да именно, я понимаю что надо смотреть РЕ формат, но может ты сможешь подсказать где храниться список адресов для замены ?
Начни с изучения спецификации PE COFF, которую можно свободно скачать в первоисточнике (Microsoft). Иначе ты так и будешь переспрашивать, несмотря на то, что тебе УЖЕ ответили! Релоки, релокации, relocs, relocations.
XshStasX В двух словах -- в директории данных (DataDirectory), это такая маленькая база данных исполняемого файла. Она описывает RVA и размеры жизненноважных данных исполняемого. В том числе -- таблицу релокаций. Сам формат релокаций довольно простой -- они описывают все смещения, которые должны быть исправлены с грануляцией в страницу. Т.е. сначала идет информация о релокациях на первой странице исполняемого, затем на второй и т.д. За подробностями можно сходить в документ, предложенный Jupiter'ом или почитать это: http://msdn.microsoft.com/en-us/magazine/cc301805.aspx В конце статьи есть ссылка на более базовый (и менее точный) документ, в котором все разжевано до мелочей.