|
|
| Посл.отвђт | Сообщен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 |