Проблема с аппаратной точкой остнова в WinDbg Preview

Тема в разделе "WASM.BEGINNERS", создана пользователем 808Problem, 19 июл 2023.

  1. 808Problem

    808Problem Member

    Публикаций:
    0
    Регистрация:
    1 мар 2023
    Сообщения:
    31
    Добрый вечер.

    Во время отладки в ядре винды возникло противоречие опции /p (в контексте команды ba) и ожидаемым результатом, основанным на описании опции тут: https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/ba--break-on-access-

    А именно, когда я хочу аппаратно остановится на какой-нибудь функции в контексте нужного мне процесса и изложив желание отладчику такой командой: ba e 1 /p [EPROCESS] nt!NtCreateFile, опция /p не дала ожидаемого результата - отладчик почему-то брякается с любого контекста, игнорируя указанный мной /p [EPROCESS].

    Вопрос, почему так? Что я не понимаю? Ведь не могли же меня дяди из Microsoft обмануть :dntknw: Или может быть у меня какой-то процессор особенный, который своеобразным образом обрабатывает бряки, игнорируя команды отладчика /p

    P.S С программными бряками (bp), к счастью никаких проблем нет. Но хотелось, чтобы и аппаратные работали, как ожидалось(мной).
     
  2. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    189
    Проверьте состояние бряка командой bl (list).
    Скорее всего адрес структуры [EPROCESS] указан не верно. В доке по вашему линку сказано-же:

     
    808Problem и Mikl___ нравится это.
  3. 808Problem

    808Problem Member

    Публикаций:
    0
    Регистрация:
    1 мар 2023
    Сообщения:
    31
    Хм, я только что заметил - первая остановка происходит как надо, согласно указанному EPROCESS, но вот последующие остановки игнорируют /p опцию. Разве это ожидаемый результат работы ba?
     
  4. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    189
    так вроде параметр "Options" отвечает за время жизни.
    например такой вариант должен отработать 5 бряков:

    ba e 1 /5 /p [EPROCESS] nt!NtCreateFile
     
    808Problem и Mikl___ нравится это.
  5. 808Problem

    808Problem Member

    Публикаций:
    0
    Регистрация:
    1 мар 2023
    Сообщения:
    31
    Я не выставлял вообще эту опцию, а значит, я говорю отладчику, что время жизни неограниченно
    --- Сообщение объединено, 20 июл 2023 ---
    Ну ладно, фиг с ним. Если так работает , значит так надо! В любом случае, отладчик у них замечательный :heart:
     
  6. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    189
    Аппаратные точки ставятся через отладочные регистры DR0..DR7, при этом DR6 является информационным. Когда одна из 4-х точек сработает, то в битах DR6.[3:0] взводится соответствующий флаг. Суть в том, что ЦП не очищает сам эти флаги в DR6 после срабатывания точки, чтобы программист мог отследить факт останова. По ходу WinDbg тоже не сбрасывает в дефолт эти биты, в результате чего бряк срабатывает всего один раз.

    Можно попробовать конструкцию ниже для установки точки..
    Здесь, при очередном срабатывании бряка, командой "rM 20" (Register Mask) выводится лог состояния регистров DR0-DR7 (см.биты DR6.[3:0]), после чего точка устанавливается повторно.

    Код (Text):
    1. ba e 1 /p [EPROCESS] nt!NtCreateFile " rM 20; ba e 1 /p [EPROCESS] nt!NtCreateFile; "
    DR.jpg
    --- Сообщение объединено, 21 июл 2023 ---
    Кстати можно в хвосте тоже поставить "rM 20", что посмотреть конфиг регистров до и после установки бряка:

    Код (Text):
    1. ba e 1 /p [EPROCESS] nt!NtCreateFile " echo ****; rM 20; ba e 1 /p [EPROCESS] nt!NtCreateFile; echo ****; rM 20; "
     
    808Problem и Mikl___ нравится это.
  7. 808Problem

    808Problem Member

    Публикаций:
    0
    Регистрация:
    1 мар 2023
    Сообщения:
    31
    Ах дак вот в чём дело-то... Спасибо вам, как всегда помогли мне. А вот ещё, скажите, как вы определили корректную маску для отображения только нужных регистров - rM 20
    Как вы выяснили, что именно маска 20 отобразит DR0-DR7?
     
  8. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    189
    Mikl___ и 808Problem нравится это.
  9. 808Problem

    808Problem Member

    Публикаций:
    0
    Регистрация:
    1 мар 2023
    Сообщения:
    31
    Marylin нравится это.
  10. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    189
    В команде выше ошибочка вышла (пишу навскидку, без тестов).
    Чтобы после установки HBP просмотреть состояние регистров DR0-7, нужно командой "р" в отладчике сделать шаг. Только тогда WinDbg обновит регистры DR. То-есть правильней будет указать примерно так:

    Код (Text):
    1. ba e 1 /p [EPROCESS] nt!NtCreateFile " rM 20; ba e 1 /p [EPROCESS] nt!NtCreateFile; p; rM 20; "
     
    Mikl___ и 808Problem нравится это.