Подскажите, возможно ли изменять начальные адреса файла типа : 0000140 программно, типа сначало вбиваешь FF , а чтоб по ходу запуска значение менялось на нужное.
Это ты про что? Если про размещение кода в памяти, то можешь писать либо базонезависимый код, либо дизасм/асм с изменением базы.
Ну типа файл начинается с опкода MZP(4D 5A 50), и в плоть до 400000 (ну если ImageBase такой), в начале идёт информация о файле, т.е. Какой формат, количество и название секций и .т.п., так вот, можно ли данные вплоть до 400000 изменить, пытаюсь но система выдаёт : "инструкция ...... обратилась к памяти по адресу 0x0000140 ". Память не может быть "written". Вообще можно сделать. Если изначально менять, то получается, что формат файла не являетсЯ PE
А какого тебе там надо ? Насколько мне известно, адреса виртуального пространства с 0х00000000 до 0х00032768 зарезервированы системой. Если я правильно понял вопрос, то тебе надо обращаться не к 0х00000140, а к ImageBase + 0х00000140 так как с Imagebase и начинается проекция файла.
Тебе надо чтобы по ходу программа переместилась на адрес 0х00000140? Если да то понятное дело работать она там не будет.
Да ни какой тайны...всё как обычно: Название секций и т.п.! В итоге если после того как файл загрузился в память изменить количество секций.....любой отладчик падает!
Жестко Все, что есть в твоем файле, включая заголовки, таблицу секций и "опкод" MZP(4D 5A 50) , начинается с ImageBase.
Хм..? А о TLS, почему все забыли? В данном тяжелом случае, именно этот вариант лучше всего выбрать =)))
_KLAUS_ Если тебя еще не убедили в том, что нужно смотреть адрес ImageBase+140h, то возьми отладчик OllyDbg и убедись сам. Берешь любой простенький ехе-шник (без заморочек) и открываешь в Olly двумя способами 1) просмотр файла на диске: кликаешь меню View\File, открываешь exe и затем по правой кнопке задаешь вид Special -> PE header. Для стандартного заголовка по смещению 140h видишь TLS Table Address 2) просмотр загруженного образа: открываешь тот же файл в дизассемблере (меню File\Open), затем смотришь карту распределения памяти (меню View\Memory), выбираешь строчку PE header по адресу 400000h и по правой кнопке выбираешь Dump - в результате получаешь точно такой же вид PE-заголовка, как и при просмотре файла, но все адреса ес-но смещены на ImageBase=400000h, в том числе и твой TLS Table Address = 400140h
Demon666 Ты о чём? _KLAUS_ Ксакепов начитался? Возьмись за ум лучше. Прочитай описание формата PE ("MZP" - это явно на Delphi смотрел), о работе загрузчика. Потом придёшь.
IceStudent Да все о том, что из первого поста можно сделать вывод: _KLAUS_ хочет забить PE мусором и когда прогу запустит "юзер", она должна исправить все его "FF" на нужные и "правильные" значения (_KLAUS_ поправь, если что не так?) TLS как раз то что надо, до запуска EP позволят запустить программный код который превратит весь мусор (FF) и изменит начальные адреса на нужные значения! P. S. Что такое TLS я объяснять не собираюсь!!!