Как заставить точки останова пользовательского режима срабатывать в windbg во время отладки ядра?

У меня возникли проблемы с получением точек останова пользовательского режима в Windbg, когда я отлаживаю ядро. Я знаю, что мне нужно быть в контексте целевого процесса, чтобы установить точку останова пользовательского режима, но это все еще не работает надежно. Иногда это работает, но я не могу понять, что это за переменная, из-за которой она иногда работает, а другие нет. Вот что я делаю.

1) !process <process> 0x17, then find a thread that I am curious 
   about.  See that the thread is in mixed user/kernel callstack, 
   identify return address I want to break on.

2) .process /r /p <process>, to change to the target process context

3) .thread <thread>, to change to the thread identified in step (1)

4) bp <addr>, to break on that particular address I care about

5) g

Иногда срабатывает точка останова. Иногда это не так (за исключением того, что у меня есть доказательства того, что поток вернулся). Это делает отладку действительно разочаровывающей, поскольку я никогда не знаю, будет ли что-то работать. Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ: речь идет не о точках останова для конкретных потоков, в моем примере я только меняю поток, чтобы взять стек вызовов, потому что стек вызовов показывает мне адрес, на котором мне нужно остановиться. На самом деле я хочу сломаться всякий раз, когда этот адрес попадает.


person R. Alabaster    schedule 04.08.2017    source источник


Ответы (1)


нахождение в контексте процесса помогает расшифровать виртуальный адрес.

Я не помню, чтобы в контекстных гарантиях прерывались процессы или потоки.

используйте синтаксис адреса bp /p eprocess для установки конкретных точек останова процесса

хотя я не использовал, я помню, что есть специфичные для потока bps с адресом ethread bp / t, обратитесь к документам

person blabb    schedule 05.08.2017