Я использую windbg со встроенным xp. Попытка получить символы операционной системы завершается неудачно с сообщением «Файл символов не найден. По умолчанию экспортируются символы для ntdll.dll». (Это типично для встраиваемого xp ???)
У меня нет проблем с поиском и загрузкой символов и исходного кода для моего собственного кода. Однако пошаговое выполнение кода показывает, что существует серьезное несоответствие между кодом и файлом символов, так как расположение переменных в памяти, возвращаемое dv, похоже, не согласуется с фактическим содержимым памяти (например, назначьте переменную, но после этого адрес то, что претензии dv соответствуют ему, не остается неизменным).
Сначала я перечислил каталог символов, затем кэш, а затем сервер, чтобы кэшированные файлы символов не мешали.
Является ли это скрытым эффектом не нахождения файлов символов ntdll и использования другого, который не соответствует должным образом, или это может быть причиной чего-то еще?
Пример:
.sympath D:/Symbols<br>
.symfix+<br>
.srcpath D:/Symbols ** Yes, currently the source is in with the symbols<br>
.reload<br>
** (defaults to export symbols for ntdll.dll since symbol file can't be found)<br>
bp 00401000 (break at a constructor)<br>
g<br>
(program runs till it hits constructor)<br>
l+t<br>
dv /i /t /V ** look up this pointer memory location to check constructor<br>
** We bring up a memory window at the location the this pointer refers to and<br>
** step through the code, but no changes appear in that memory window<br>
** moreover a local LARGE_INTEGER whose value is set with QueryPerformanceCounter<br>
** also appears unchanged after the call<br>
** when the constructor returns we assign the memory address returned by <br>
** new to a global pointer, whose memory address we look up with dt, but<br>
** after the call that address still has 0 in it
Может кто-нибудь сказать мне, как на самом деле это исправить?
В качестве дополнительного примечания мы фактически запускаем cdb в качестве сервера на машине, встроенной в xp, и используем параметр «connect to remote session» в windbg. Все вышеперечисленные команды выполняются через windbg.