Как SoftIce узнает, что происходит загрузка ?

Тема в разделе "WASM.RESEARCH", создана пользователем valterg, 26 сен 2004.

  1. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Исследую, что можно делать в среде ERD-коммандера

    и консоли восстановления. Native приложения научился

    делать и проверил запуск. Теперь решил похулиганить :

    запускаю экзешник с DLL. Естественно вылетает,

    однако SoftICE показывает, что началась загрузка.

    Вот и хотелось бы перехватить процесс загрузки

    и посмотреть причины вылета.

    Ну и второй вопрос : стоит ли запускать приложение

    с native-dll собственного изготовления или оно тоже вылетит.
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Во-первых, айс - это драйвер, а для драйверв есть PsSetLoadImageNotifyRoutine. И обрати внимание, что в самом начале лога, который на айсову консоль выводится, мелькают всякие интересные месаги типа:



    NTICE: MiMapViewOfImageSection found at XXXXXXXX

    NTICE: PsLoadedModuleList found at XXXXXXXX

    NTICE: MiUnmapViewOfSection found at XXXXXXXX



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

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105




    Может и хучит. Только мне удалось перехватить

    управление почти сразу после того, как SoftIce

    сказал, что загружена ntdll.dll ( длина загрузки

    0х7c000). Однако дамп памяти показывает только

    заголовок - 0х1000 байт А по протоколу

    айса уже грузятся драйвера. Возможно конечно,

    что тут хитрая игра защиты памяти ?!

    Но вернемся к тому, ради чего это все затевалось.

    Решил я выяснить, где происходит авария. И оказалось,

    что подпрограмма RtlCreateUserProcess делает

    совсем не то, что можно подумать. Она грузит

    из файла только одну секцию

    ( там где список DLL) и грузит ntdll !

    Айс радостно кричит, что "load32 .... autochk.exe"

    Однако тут память можно посмотреть - в секции кода

    пока "мусор" !

    Возращаюсь к моему вопросу. Я пометил адрес ,

    при переходе на который айс выдает сообщение

    и теперь уже сам выясню секрет :)

    Одновременно я понял, что для запуска проги не native,

    последовательность действий из smss ( erd-commander)

    не годится и надо смотреть, как система грузит

    kernel32.dll - без него труба.
     
  4. Four-F

    Four-F New Member

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