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

Я исследую файл дампа Windows в WinDBG. Я могу переключать кадр стека вызовов командой .frame, но обнаружил, что регистры всегда содержат последний контекст. Я имею в виду, возможно ли восстановить контекст, принадлежащий определенному фрейму стека вызовов, который не является верхним?


person Fan Yang    schedule 06.04.2012    source источник


Ответы (2)


Если вы отлаживаете цель x64, вы можете использовать:

.frame /r

Для просмотра регистров в кадре. Эта информация основана на данных раскрутки в образе, поэтому она довольно надежна. Вы также можете изменить контекст с помощью:

.frame /c

На x86 информация о раскрутке отсутствует, поэтому этот трюк не работает. .frame по-прежнему покажет вам что-то для регистров, но вряд ли это будет правильно (в основном это будет правильно только по счастливой случайности).

person snoone    schedule 06.04.2012
comment
Понятно. Я могу найти регистры в стеке только косвенно. - person Fan Yang; 13.04.2012

попробуйте findthis.py, который является своего рода получением CFI (информация о кадре вызова) путем разборки пролога каждого кадра в стеке вызовов.

http://nick.luckygarden.org/find-this-ptr-within-a-callstack-in-a-dump-file/

person Nick X    schedule 30.12.2014