Как настроить Visual Studio 2008 для отображения истинного адреса EIP в окне разборки? - PullRequest
4 голосов
/ 09 апреля 2011

Отладчик 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 Ответ

4 голосов
/ 10 апреля 2011

Да, это ошибка в отладчике. Адреса, которые он рассчитывает, основаны на адресе, указанном слева. Какие-то подделки, фактический машинный код не начинается с адреса 0. У него нет возможности показать реальные адреса.

Чтобы найти реальный целевой адрес вызова, вы должны установить точку останова в инструкции вызова. Когда он попадет, используйте Debug + Windows + Registers и скопируйте / вставьте значение регистра EIP в свой калькулятор. Затем добавьте значение аргумента вызова и вычтите значение адреса, как показано слева. Это реальный адрес.

Чтобы просмотреть там машинный код, вам необходимо переключить отладчик в неуправляемый режим. Отладка + Windows + Call Stack и дважды щелкните один из кадров стека неуправляемого метода. Внизу, если вы не уверены. Теперь введите «0x» в поле «Адрес» и скопируйте / вставьте адрес, который вы рассчитали. Убедитесь, что сервер символов включен.

...