Упаковщик, SEH, фигня какая-то

Тема в разделе "WASM.NT.KERNEL", создана пользователем hlt, 26 апр 2010.

  1. hlt

    hlt Member

    Публикаций:
    0
    Регистрация:
    21 дек 2007
    Сообщения:
    56
    Пишу упаковщик дров. Интересная ситуация:
    1. загружаю оригинальный драйвер, имею следующую запись в списке модулей:
    2. Загружаю упакованный образ, и там ключевая проблема в InMemoryOrderLinks : _LIST_ENTRY [ 0xffffffff - 0xffffffff ]
    изза этой хрени, RtlIsValidHandler возвращает 0, но при этом, внутренний вызов RtlLookupFunctionTable отрабатывает нормально. (Хандлер SEH 100% внутри образа).
    В чем может быть соль? - Вернее, из каких соображений в первом случае InMemoryOrderLinks : _LIST_ENTRY [ 0xf9cd6110 - 0x2 ] ?
     
  2. hlt

    hlt Member

    Публикаций:
    0
    Регистрация:
    21 дек 2007
    Сообщения:
    56
    как я понял, реально эти поля указывают на RUNTIME_FUNCTION, откуда они берутся? Образ 32-х разрядный вроде... просвятите плиз :)
     
  3. hlt

    hlt Member

    Публикаций:
    0
    Регистрация:
    21 дек 2007
    Сообщения:
    56
    Глянул в оригинальное Exception Directory - пусто.
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Код (Text):
    1. typedef struct _KLDR_DATA_TABLE_ENTRY
    2. {
    3.     LIST_ENTRY InLoadOrderLinks;
    4.     PVOID ExceptionTable;
    5.     ULONG ExceptionTableSize;
    6.     PVOID GpValue;
    7.     PNON_PAGED_DEBUG_INFO NonPagedDebugInfo;
    8.     PVOID DllBase;
    9.     PVOID EntryPoint;
    10.     ULONG SizeOfImage;
    11.     UNICODE_STRING FullDllName;
    12.     UNICODE_STRING BaseDllName;
    13.     ULONG Flags;
    14.     USHORT LoadCount;
    15.     USHORT __Unused5;
    16.     PVOID SectionPointer;
    17.     ULONG CheckSum;
    18. }
    19. KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;
     
  5. hlt

    hlt Member

    Публикаций:
    0
    Регистрация:
    21 дек 2007
    Сообщения:
    56
    Да, я уже понял, а не подскажешь, с какого перепуга 32-х разр. образ без каталога эксепшенов получает себе в модулях корректные значения?
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Самое лучшее, что ты можешь сделать в данной ситуации, это собрать ядро WRK и запустить его на отладку в виртуалке в Windows Server 2003 SP1. Таким образом ты вживую увидишь, что и как происходит во время загрузки модулей ядра. Если будут попадаться вырезанные моменты (хотя вряд ли), их можно будет подсмотреть в исходниках Windows 2000, она по крайне мере без цензуры. Так ты получишь ответ на этот и, возможно, многие другие сопутствующие вопросы. Удачи.
     
  7. hlt

    hlt Member

    Публикаций:
    0
    Регистрация:
    21 дек 2007
    Сообщения:
    56
    Все, вопрос снят, проблема решена :). Т.к. добрые люди не помогли - делиться не буду :)))
     
  8. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Сделай шаг первым, а добрые люди обязательно помогут, но в следующий раз.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    hlt
    Выравнивать нужно на 4 линки. Иначе RtlDispatchException() возвратит ошибку, что приведёт к багчеку.