Как мне настроить Visual Studio 2008 для отображения истинного EIP-адреса в окне разборки?

#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 кто-нибудь, вероятно, уже сделал такой поиск первым. Голосуйте за.