Кто обрабатывает сообщения от DbgPrint в ядре ?

Тема в разделе "WASM.WIN32", создана пользователем SteelRat, 3 авг 2005.

  1. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    В драйвере NDIS много раз вызывается DbgPrint в w2k работает нормально, но там был запущен DbgView (вместе c Айсом) Опробовал на ХР (без Айса и DbgView) - всё работало нормально, а через минут 20 просто перезагрузилась (без BSOD) Вопрос в следующем сообщения от DbgPrint нигде не задерживаются ? Н-р как в оконной процедуре. Возможен вариант переполнения какого-то буфера :dntknw:
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    SteelRat

    у меня была один раз (мне хватило) проблема :

    Отлаживаю драйвер (сайс включен). Потом что-то не захотелось замораживать винду (музыка играет) но нужно было посмиотреть сообщения я завел DbgView. вроде сообщения приходят, а потом бац, я впал в сайс в функцию Interlockedxxx... и в сайсе появилось сообщение Page Fault . При дальшейшем выполнение (команда g) винда крутилась в этой функции, при чем, 5 сек винет 5 сек работает ... и так постоянно, пока я не нажал 3 заветные клавиши, и не ушел в ребут.
     
  3. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    В MSDN сказано, что размер буфера w2k 4кб. но посылать не более 512 байт, в 2003 размер можно менять. Вот я и задумался - этот буфер очищает система, или программы типа DbgView ?
     
  4. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    SteelRat

    TermoSINteZ

    а ЦП наверное с HT?

    DbgView использует небезопасный способ перехвата -

    падч начала функции (может, в последних версиях

    это и устранено не смотрел), который приводит

    к проблемам на многоцпшных машинах.

    правильный способ перехвата - патч таблицы импорта.
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    kaspersky

    нет у меня проц селик (урезанный 4 пень 1700 мгц) , без HT

    по поводу несовместимости обоих программ это верно, скорее всего DbgView виноват .



    IceStudent

    спасибо за ссылку
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    <font color="gray][ kaspersky</font><!--color--><font color="gray]: DbgView использует небезопасный способ перехвата - падч начала функции (может, в последних версиях это и устранено не смотрел), который приводит к проблемам на многоцпшных машинах. ]</font><!--color-->



    Глянул последнюю версию 4.41 (драйвер версии 4.32) - ничего не изменилось (опасный патч в два приёма):


    Код (Text):
    1. :000109A8           call  Remap
    2. . . .
    3. :000109AD           mov   ecx, g_pfnDbgPrint
    4. :000109B8           mov   word ptr [ecx], 25FFh                          ; jmp
    5. . . .
    6. :000109D3           mov   ecx, g_pfnDbgPrint
    7. . . .
    8. :000109DA           mov   dword ptr [ecx+2], offset g_pfnDbgPrintHook    ; address
    9. . . .
    10. :000109E1           call  Unmap


    Кстати говоря, можно использовать CMPXCHG8B - тогда всё будет ОК.





    Но вот что интересно. В предыдущих версиях Марк делал ремапинг ( MmCreateMdl / MmBuildMdlForNonPagedPool / MmMapLockedPages ). А вот тут ремапинг только под free билдом, а если checked билд, то сброс WP.


    Код (Text):
    1. :00010344 Remap     proc near
    2. :00010344           mov   eax, ds:NtBuildNumber
    3. :00010349           mov   eax, [eax]
    4. :0001034B           and   eax, 0F0000000h
    5. :00010350           cmp   eax, 0C0000000h         ; checked or free ?
    6. :00010355           jnz   short loc_10369         ; free build
    7. :00010357
    8. :00010357           push  ebx                     ; checked build
    9. :00010358           mov   eax, cr0
    10. :0001035B           mov   ebx, eax
    11. :0001035D           and   eax, 0FFFEFFFFh         ; clear WP
    12. :00010362           mov   cr0, eax
    13. :00010365           mov   eax, ebx
    14. :00010367           pop   ebx                     ; return old cr0
    15. :00010368           retn
    16. :00010369
    17. :00010369 loc_10369:
    18. :00010369           push  1000h                   ; free build
    19. :0001036E           push  g_pfnDbgPrint
    20. :00010374           push  NULL
    21. :00010376           call  ds:MmCreateMdl
    22. :0001037C
    23. :0001037C           push  eax                     ; pMDL
    24. :0001037D           mov   g_pMDL, eax
    25. :00010382           call  ds:MmBuildMdlForNonPagedPool
    26. :00010388
    27. :00010388           push  KernelMode
    28. :0001038A           push  g_pMDL
    29. :00010390           call  ds:MmMapLockedPages
    30. :00010396
    31. :00010396           mov   g_pfnDbgPrint, eax
    32. :0001039B           xor   eax, eax
    33. :0001039D           retn
    34. :0001039D Remap     endp




    Кто нибудь может пояснить, почему для дебужной винды манипуляции с cr0, а для фришной ремапинг?
     
  8. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Ну, сплайсинг на многопроцессорных машинах может сглючить только в момент установки хука, и то, при правильной реализации вероятность этого настолько низка, что ею можно принебречь.







    Это конечно в высшей степени странно. Но сброс WP бита тоже достаточно стабильно работает.
     
  9. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    <font color="gray][ Ms Rem</font><!--color--><font color="gray]: Ну, сплайсинг на многопроцессорных машинах может сглючить только в момент установки хука, и то, при правильной реализации вероятность этого настолько низка, что ею можно принебречь. ]</font><!--color-->



    Это понятно. Для таких инструментов как DbgView один голубой экран на 1000...000 запусков не проблема, а в коммерческих проектах конечно же неприемлемо.





    <font color="gray][ Ms Rem</font><!--color--><font color="gray]: Но сброс WP бита тоже достаточно стабильно работает. ]</font><!--color-->



    Это тоже понятно. Оба метода одинакого (?) стабильны, но зачем один из них испльзовать на free, а другой на checked? Значит какая-то разница есть. Вопрос какая?
     
  10. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Полная стабильность - это идеал к которому нужно стремиться, но если посмотреть на реальность, то большинство коммерческих программ куда более глючны чем одно падение на 1000...000 запусков. Даже продукты МелкоСофта не доходят до идеала.

    Допустим, программа загружается один раз и только при старте системы (как большинство фаерволлов и антивирусов), при этом в системе еще мало потоков и вероятность падения снижается с 1000...000 запусков до совсем ничтожной величины, причем падение при этом не может причинить какой-либо ущерб. Разве в этом случае такой метод не может применяться в коммерческих программах?
     
  11. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Это риторический вопрос. Я так воспитан, что 0,00000000001% вероятность голубого экрана, для меня означает 100%.
     
  12. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    ...Ну, сплайсинг на многопроцессорных машинах может сглючить только в момент установки хука, и то, при правильной реализации вероятность этого настолько низка, что ею можно принебречь.



    тебе и Four-F и nikita вроде уже объясняли в чем разница между домашними поделками и коммерческим кодом, а ты ведешь себя как Swing из соседнего топика
     
  13. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    infern0

    А я вроде бы обьяснил целесообразность применения сплайсинга и привел пример коммерческих программ где это с успехом используется.

    Приведенный на reng.ru метод хуков (через int3) уж точно никуда не годен (причины я обьяснял).

    Остаются хуки через таблицу импорта и через SDT.

    А если вдруг нужно будет перехватить неэкспортируемую функцию? Предложи тогда абсолютно стабильный метод, подходящий для использования в коммерческих продуктах.



    Если нужна абсолютная стабильность (которой не бывает), то не используй сплайсинг. Я свое мнение тебе не навязываю.
     
  14. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Кстати, вариант с CMPXCHG8B приведенный Four-F тоже хорошее решение. Или можно заюзать MMX для быстрого патча.
     
  15. _CC

    _CC New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    52
    >> Даже продукты МелкоСофта не доходят до идеала.

    Даже рядом не стоят.. =))



    2Ms Rem

    Если нужна абсолютная стабильность - выключи компьютер.. И то не факт..
     
  16. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    <font color="gray][ Four-F</font><!--color--><font color="gray]: Кто нибудь может пояснить, почему для дебужной винды манипуляции с cr0, а для фришной ремапинг? ]</font><!--color-->



    Вот ответ автора: "The checked build asserts on the double-mapping."