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

 WASM Phorum —› WASM.RESEARCH —› Как SoftIce узнает, что происходит загрузка ?

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


Дата: Сен 26, 2004 19:21:48

Исследую, что можно делать в среде ERD-коммандера
и консоли восстановления. Native приложения научился
делать и проверил запуск. Теперь решил похулиганить :
запускаю экзешник с DLL. Естественно вылетает,
однако SoftICE показывает, что началась загрузка.
Вот и хотелось бы перехватить процесс загрузки
и посмотреть причины вылета.
Ну и второй вопрос : стоит ли запускать приложение
с native-dll собственного изготовления или оно тоже вылетит.


Дата: Сен 26, 2004 22:30:51

Во-первых, айс - это драйвер, а для драйверв есть PsSetLoadImageNotifyRoutine. И обрати внимание, что в самом начале лога, который на айсову консоль выводится, мелькают всякие интересные месаги типа:

NTICE: MiMapViewOfImageSection found at XXXXXXXX
NTICE: PsLoadedModuleList found at XXXXXXXX
NTICE: MiUnmapViewOfSection found at XXXXXXXX

... хучит он это дело. Отсюда и знает "что происходит загрузка".


Дата: Сен 27, 2004 19:44:53 · Поправил: valterg

„хучит он это дело“

Может и хучит. Только мне удалось перехватить
управление почти сразу после того, как SoftIce
сказал, что загружена ntdll.dll ( длина загрузки
0х7c000). Однако дамп памяти показывает только
заголовок - 0х1000 байт А по протоколу
айса уже грузятся драйвера. Возможно конечно,
что тут хитрая игра защиты памяти ?!
Но вернемся к тому, ради чего это все затевалось.
Решил я выяснить, где происходит авария. И оказалось,
что подпрограмма RtlCreateUserProcess делает
совсем не то, что можно подумать. Она грузит
из файла только одну секцию
( там где список DLL) и грузит ntdll !
Айс радостно кричит, что "load32 .... autochk.exe"
Однако тут память можно посмотреть - в секции кода
пока "мусор" !
Возращаюсь к моему вопросу. Я пометил адрес ,
при переходе на который айс выдает сообщение
и теперь уже сам выясню секрет :-)
Одновременно я понял, что для запуска проги не native,
последовательность действий из smss ( erd-commander)
не годится и надо смотреть, как система грузит
kernel32.dll - без него труба.


Дата: Сен 28, 2004 14:10:05

Быcтрее всего, дело в том, что система не делает ничего до тех пор, пока это не станет абсолютно необходимо. Для отображения длл достаточно прочитать её заголовок и отобразить в память, но реально отображение (т.е. копирование из файла в память) произойдет тогда, когда к этой памяти будет обращение. Тогда произойдет исключение и его обработчик подгрузит эту и ещё несколко страниц из файла. Т.к. к заголовку уже было обращение, он уже присутствует в памяти, а всё остальное нет. Думаю, что примерно так.


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