Гм.. Я запутался... Где кроме Fix Up's Table RVA по смещению A4h от начала PE-заголовка может находиться адрес таблиц(ы) настроек? Вопрос конкретней: как, например, запускаются все графические fasm'ы? Таблица релоков у них отсутствует...
Как и любая другая прога... Грузится образ по адресу 400000h и запускется код по смещению, кратному 1000h. А в чем вопрос то?
И, кроме того, вовсе не обязательно по смещению A4h от начала PE-заголовка. Так искать фиксапы не корректно.
B_108 > Как он будет занят, если под процесс (по нормальному) выделяется своё виртуальное адресное пространство?
Окей, поправьте, где я ошибаюсь: Фишка вирт. адр. пространства заключается в том, что винда для каждого процесса имеет свой каталог страниц и "переключает" каталоги вместе с переключением процессов. Если процесс хочет дотянуться до вирт. адреса, который отстутствует в каталоге страниц, возникает исключение. У нас флэт модель памяти. Т.е. адрес 400000h есть только у одного процесса.
Эти компиляторы (Fasmw.exe) не имеют релоков и у них фиксированный image base (400000h), по которому они и грузятся, т.к. exe модуль проецируется в юзерное простр-во вторым (в NT после ntdll.dll). Это место (400000h) в виртуальном адр. простр-ве свободно (у ntdll.dll image base выше 70000000h) и вообще юзерное простр-во у каждого процесса своё
В екзешниках, наверное только когда их надо загрузить по адресу, отличному от image base, указанному на этапе их компиляции. Чтобы увидеть "своими глазами" процесс создания процесса , то, что происходит на этапе инициализации и загрузки модулей в юзермоде, советую сделать так: 1. Установить OllyDbg 2. В его настройках поставить галочку (а лучше везде) Код (Text): OllyDbg\Options\Debugging options\Events\[+]Break on debug string 3. Запустить рег-файл примерно следующего содержания Код (Text): REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msgbox.exe] "GlobalFlag"="0x00000002" "Debugger"="c:\\masm32\\tools\\ollydbg\\ollydbg.exe" Где msgbox.exe - отлаживаемое приложение, при запуске которого, будет стартовать отладчик (или что другое, уведомляемый LDR-строками з.ы. во время отладки посматривать на карту памяти (Alt+M)
B_108 > когда вообще могут понадобиться релокейшены в екзешниках (не длл) Если собрать файл с ImageBase<0x400000 и запускать его в win98 тогда релоки определенно понадобятся
bogrus Понял Спасибо за быстрые ответы )) Наверно, последний вопрос Но если указывать image base=400000h, то на всех существующих версиях виндов конфликта происходить не будет?
Процесс, в силу некоторых причин, может отображаться в адресное пр-во другого процесса (например при установке хуков и уж точно не по адресу 400000h), тогда нужны релокейшены. Но, в РЕ ЕХЕ в Виннде2000 и ХР релокейшены игноририруются, в отличнии от 98. Для ДЛЛ релокейшены необходимы, тк вообще говоря неизвестно по какому адресу она грузится.