#c# #debugging #visual-studio-2008-sp1 #disassembly
#c# #отладка #visual-studio-2008-sp1 #разборка
Вопрос:
Отладчик Visual Studio 2008 отображает относительные адреса в окне разборки, как показано во фрагменте ниже:
00000548 8B 4D B8 mov ecx,dword ptr [ebp-48h]
0000054b 8B 01 mov eax,dword ptr [ecx]
0000054d FF 50 28 call dword ptr [eax 28h]
00000550 89 85 44 FF FF FF mov dword ptr [ebp FFFFFF44h],eax
00000556 8B 8D 44 FF FF FF mov ecx,dword ptr [ebp FFFFFF44h]
0000055c E8 2F 1D 2C 76 call 762C2290
00000561 90 nop
Обратите внимание, что значения адресов слишком малы, чтобы быть реальными адресами. Когда я нахожусь по адресу 0x548 (первая строка), мой EIP равен 0x034D1A90. Как мне настроить окно отладчика / разборки так, чтобы в нем отображался реальный адрес (например, 0x034D1A90) вместо относительного адреса (например, 0x0548)?
Комментарии:
1. Все еще не исправлено в VS2012. Предстоит еще долгий путь, пока VS не сравняется по функциональности с Windbg.
Ответ №1:
Да, это ошибка в отладчике. Адреса, которые он вычисляет, основаны на адресе, указанном слева. Которые являются поддельными, фактический машинный код не начинается с адреса 0. В нем нет опции для отображения реальных адресов.
Чтобы найти реальный адрес назначения вызова, вы должны установить точку останова в инструкции вызова. Когда это произойдет, используйте Debug Windows Registers и скопируйте / вставьте значение регистра EIP в свой калькулятор. Затем добавьте значение аргумента вызова и вычтите значение адреса, как показано слева. Это реальный адрес.
Чтобы просмотреть там машинный код, вам затем нужно переключить отладчик в неуправляемый режим. Отладка Windows Стек вызовов и дважды щелкните один из фреймов стека неуправляемого метода. Внизу, если вы не уверены. Теперь вы вводите «0x» в поле адреса и копируете / вставляете рассчитанный вами адрес. Убедитесь, что сервер символов включен.
Комментарии:
1. спасибо за подробное объяснение. Я предполагаю, что это известная ошибка. Есть ли у MS исправление для этого? (Боюсь, ответ, скорее всего, будет «нет», иначе вы, вероятно, упомянули бы исправление).
2. Так было всегда, я не сомневаюсь, что это ограничение в интерфейсе отладчика. Это имеет смысл, учитывая то, как дрожание размещает код. Вы могли бы опубликовать в connect.microsoft.com кто-нибудь, вероятно, уже сделал такой поиск первым. Голосуйте за.