Друзья! Вот штутдирую фоормат PE-файла, решил немного поэксперементировать. Решил изменить ImageBase hiew'ом (Загрузить exe файл по другому исполняемому адресу) получилось (+понадобилось изменить ещё одно место в коде). Но, поскольку, приложение было messagebox.exe, то написалась чушь всякая, ибо для вызываемой функции MessageBox в стек клались СТАРЫЕ адреса строк. А так как код сместился на дельта-смещение, то, как вы поняли, по этим адресам находился мусор какой-то, а не нужные строки. ...Фактически вопрос свёлся бы к вопросу о среде программирования- почему среда программирования MASM (код был скомпилирован с её помощью) не предполагает базовых поправок? Но точно так же обстоят дела и с Dev C++ компилятор, встроенный туда тоже не делает базовых поправок. Как так? А если чё случится? Код ведь не выполнится корректно? Или, может, авторы предполагают, что *exe файлы всегда грузятся по своим адресам, а по чужим грузятся только *dll (не всегда, а иногда, естественно). В общем, прошу разъяснить это вопрос. Спасибо.
Действительно, спасибо, формируется соответсвующая секция. Только вот не работает. То есть на этот раз я правлю в Hiew одно поле- базовый адрес. Прога нормально по нему загружается. Базовые поправки тоже корректные, я просмотрел, благо их немного, несколько штук всего. Только вот они почему-то по нужным адресам не прибавляются... Есть какие-нибудь предположения? Может, когда адрес правишь вручную, дельта-смещение не прибавляется/отнимается?
Совершенно верно. Релокация проверяется когда модуль грузится по адресу отличному от ImageBase. Ты подправил адрес, модуль грузится по новому, но этот адрес равен ImageBase.
А, понял на самом деле, спасибо Ну, блин, облом какой... А вот скажите пожалуйста, что значит /BASE? Просто я пишу /BASE:3900000 а он меня кидает на адрес 60000... Пишу 20000 кидает на 41000. Всё бы разрешилось, знай я за ключи. Но! Я отыскал в пакете masm информцию по ключам линковщика C:\masm32\help\masm32.chm Нашёл там LINK Options и вот: /ALIGN:# /BASE:{address|@filename,key} /COMMENT:comment /DEBUG ...И так далее без комментариев,ключей 20. А как я узнаю (например), какое смещение имеется ввиду- файловое или секционное (первый пункт)? Подскажите, пожалуйста. ...Ну, я понимаю, что address|@filename,key значит адрес или имя файла... Какое имя файла? Короче, дальше я уже не понимаю. Извините.
В смысле? Я его не меняю- по крайней мере, явно, оно как было 1000h так и останется ...Вот только на английском что-то нашёл http://msdn.microsoft.com/en-us/library/f7f5138s%28VS.71%29.aspx