PEB что фиксить?

Тема в разделе "WASM.BEGINNERS", создана пользователем mrcrown, 2 фев 2008.

  1. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    MSoft
    исключение даже с теми бинарниками где нет typelib ресурсов и манифеста, так что скорей дело не в них.

    Clerk
    с другим бинарником исключение в gdi32.pldcGet (0x77F159B6).
    кидаю его, вот код:
    вызывается из ...
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    deLight
    Что на момент возникновения исключения в PEB по смещению 0x94 ?
     
  3. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    0x7FFD8094: 00 00 40 00

    GdiDCAttributeList:
    0x7FFD809c: 14 00 00 00
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    deLight
    Нужно продебажить, так не совсем понятно. Короче когда исполняется инициализация gdi32, в NtGdiInit есчо до вызова ядерного калбэка в процесс должны быть промаплены две секции, указатель на вторую занрсится в PEB.GdiSharedHandleTable. Это вызывается из InitRoutine, цепочка UserClientDllInitialize -> GdiDllInitialize -> NtGdiInit, ядерный калбэк вызывает user32!ClientThreadSetup -> GdiProcessSetup. Последняя копирует возвращенный ядром указатель из пеб в переменные pGdiSharedMemory и pGdiSharedHandleTable, собственно изза невалидного указателя в последней переменной и возникает исключение.
    Тебе нужно продебажить и посмотреть как выполняется инициализация этих переменных.
     
  5. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Порядок. GdiSharedHandleTable инициализируется из DllMain user32, который и висел у меня в импорте. Таблица хендлов выделялась в "плохом" для меня месте и потом перезаписывалась одной из секций, отчего и все последующие исключения.

    Clerk
    спасибо за помощь