· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Релокейшены

Посл.отвђт Сообщенiе


Дата: Окт 28, 2004 23:18:18

Гм..
Я запутался...
Где кроме Fix Up's Table RVA по смещению A4h от начала PE-заголовка может находиться адрес таблиц(ы) настроек?

Вопрос конкретней: как, например, запускаются все графические fasm'ы?
Таблица релоков у них отсутствует...


Дата: Окт 28, 2004 23:36:06

Как и любая другая прога... Грузится образ по адресу 400000h и запускется код по смещению, кратному 1000h. А в чем вопрос то?


Дата: Окт 29, 2004 00:03:30

И, кроме того, вовсе не обязательно по смещению A4h от начала PE-заголовка. Так искать фиксапы не корректно.


Дата: Окт 29, 2004 01:50:38

Turkish
А если 400000h уже занят?

volodya
А как корректно?)


Дата: Окт 29, 2004 07:09:08

B_108 > „А если 400000h уже занят? “

Как он будет занят, если под процесс (по нормальному) выделяется своё виртуальное адресное пространство?


Дата: Окт 29, 2004 14:02:39

Окей,
поправьте, где я ошибаюсь:
Фишка вирт. адр. пространства заключается в том, что винда для каждого процесса имеет свой каталог страниц и "переключает" каталоги вместе с переключением процессов.
Если процесс хочет дотянуться до вирт. адреса, который отстутствует в каталоге страниц, возникает исключение.
У нас флэт модель памяти. Т.е. адрес 400000h есть только у одного процесса.


Дата: Окт 29, 2004 14:12:34

„Вопрос конкретней: как, например, запускаются все графические fasm'ы? “

Это кто такие, где можно пример посмотреть?


Дата: Окт 29, 2004 14:16:53

„Это кто такие, где можно пример посмотреть?“
Это компиляторы под винду со встроенным редактором :)
_http://flatassembler.net/download.php


Дата: Окт 29, 2004 14:35:26

Эти компиляторы :) (Fasmw.exe) не имеют релоков и у них фиксированный image base (400000h), по которому они и грузятся, т.к. exe модуль проецируется в юзерное простр-во вторым (в NT после ntdll.dll). Это место (400000h) в виртуальном адр. простр-ве свободно (у ntdll.dll image base выше 70000000h) и вообще юзерное простр-во у каждого процесса своё


Дата: Окт 29, 2004 15:18:22

„и вообще юзерное простр-во у каждого процесса своё“
Все, дошло :)
Тогда еще один вопрос: когда вообще могут понадобиться релокейшены в екзешниках (не длл)?


Дата: Окт 29, 2004 15:32:23 · Поправил: bogrus

В екзешниках, наверное только когда их надо загрузить по адресу, отличному от image base, указанному на этапе их компиляции.

Чтобы увидеть "своими глазами" процесс создания процесса :), то, что происходит на этапе инициализации и загрузки модулей в юзермоде, советую сделать так:

1. Установить OllyDbg
2. В его настройках поставить галочку (а лучше везде)
OllyDbg\Options\Debugging options\Events\[+]Break on debug string
3. Запустить рег-файл примерно следующего содержания
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)


Дата: Окт 29, 2004 15:39:17

B_108
> когда вообще могут понадобиться релокейшены в екзешниках (не длл)

Если собрать файл с ImageBase<0x400000 и запускать его в win98 тогда релоки определенно понадобятся ;-)


Дата: Окт 29, 2004 15:46:34

bogrus
Понял :)
Спасибо за быстрые ответы :)))
Наверно, последний вопрос :)
„В екзешниках, наверное только когда их надо загрузить по адресу, отличному от image base, указанному на этапе их компиляции.“

Но если указывать image base=400000h,
то на всех существующих версиях виндов конфликта происходить не будет?


Дата: Окт 29, 2004 15:47:37

bogrus
Asterix
Пока писал, уже ответили :)))
Всем спасибо!


Дата: Окт 29, 2004 21:20:30

Процесс, в силу некоторых причин, может отображаться в адресное пр-во другого процесса (например при установке хуков и уж точно не по адресу 400000h), тогда нужны релокейшены. Но, в РЕ ЕХЕ в Виннде2000 и ХР релокейшены игноририруются, в отличнии от 98. Для ДЛЛ релокейшены необходимы, тк вообще говоря неизвестно по какому адресу она грузится.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.062