Windbg со встроенным xp, символы ntdll.dll не работают, другие символы затронуты?

Я использую Windbg с XP. Попытка получить символы операционной системы завершается неудачно с сообщением "Файл символов не найден. По умолчанию экспортируются символы для ntdll.dll". (Это типично для xp встроенного???)

У меня нет проблем с поиском и загрузкой символов и исходного кода для моего собственного кода. Однако пошаговое выполнение кода показывает, что существует серьезное несоответствие между кодом и файлом символов, так как расположение переменных в памяти, возвращаемое dv, похоже, не согласуется с фактическим содержимым памяти (например, назначьте переменную, но после этого адрес то, что претензии dv соответствуют этому, не кажется неизменным).

Моя симпатия перечисляет сначала каталог символов, затем кэш, а затем сервер, чтобы кешированные файлы символов не мешали.

Является ли это скрытым эффектом не нахождения файлов символов ntdll и использования другого, который не соответствует должным образом, или это может быть причиной чего-то еще?

Пример:
.sympath D:/Symbols
.symfix+
.srcpath D:/Symbols ** Yes, currently the source is in with the symbols
.reload
** (defaults to export symbols for ntdll.dll since symbol file can't be found)
bp 00401000 (break at a constructor)
g
(program runs till it hits constructor)
l+t
dv /i /t /V ** look up this pointer memory location to check constructor
** We bring up a memory window at the location the this pointer refers to and
** step through the code, but no changes appear in that memory window
** moreover a local LARGE_INTEGER whose value is set with QueryPerformanceCounter
** also appears unchanged after the call
** when the constructor returns we assign the memory address returned by
** new to a global pointer, whose memory address we look up with dt, but
** after the call that address still has 0 in it

Может кто-нибудь сказать мне, как на самом деле это исправить?

В качестве примечания мы фактически запускаем cdb в качестве сервера на встроенной машине xp и используем параметр "connect to remote session" в windbg. Все вышеперечисленные команды выполняются через windbg.

1 ответ

Решение

Выполнение! Sym noisy перед.reload сообщит вам, почему он не находит символы для ntdll.dll. Вполне возможно, что они просто не проиндексированы на сервере символов, что обычно означает, что вам не повезло (к сожалению, не с кем связаться, чтобы исправить это).

Что касается других ваших проблем с символами:

1) Это релизная версия вашего кода? Если так, то это вполне ожидаемо

2) Если это отладочная сборка, уверены ли вы на 100%, что источник, на который вы указываете, соответствует целевой машине? Убедитесь, что вы на 100%, прежде чем ответить:)

-Скотт

Другие вопросы по тегам