Visual Studio 2008: Как просмотреть демонтированный код для DLL, который не выполняется в данный момент

Я использую Visual Studio 2008 для разыскивания ошибки в процессе выполнения. Я присоединил к процессу и определил модуль интереса. (Это происходит, что отладочные символы для этого модуля были загружены из pdb файла.) Я хочу показать демонтированный код в окне Disassembly так, чтобы я мог решить, где установить точку останова.

Когда я повреждаю процесс, в настоящее время выполняющийся модуль показывают в окне Disassembly. К сожалению, это не модуль интереса. Я не могу выяснить, как показать код для модуля интереса, в то время как он не выполняется.

6
задан GregAshmore 28 January 2010 в 14:38
поделиться

3 ответа

Предполагая, что вы отладки неуправляемого процесса ...

Когда вы «отладки / разбиваете все», выполните следующие действия:

Выберите «Отладка / Windows / Module», чтобы получить список всех загруженных модулей. Под столбцом «Адрес» в окне модулей является диапазон памяти для этого модуля. В окне «Адрес:» в вашем окне разборки введите адрес запуска для модуля (убедитесь, что добавьте 0x до номера)

Теперь вы должны быть в начале модуля, с которым вы хотите играть. Если вы знаете адрес функции, вы можете просто перейти к этому адресу.

Вот пример:

запустить SOL.EXE Прикрепите к процессу и разбейте все. Посмотрите на модули, и найдите «Cards.dll», вы увидите его нагрузки на 6FC10000 (на моем машине, в любом случае).

Введите этот адрес (0x6fc10000) в окно разборки, и он приведет вас к началу модуля.

Теперь сказать, что хочу на самом деле перейти к функции. Откройте DLL в Walker (Defends.exe), чтобы получить смещения функций. В моем примере я хочу установить точку останова на функцию «CDInit». В зависимости от Walker, он показывает, что смещение к экспортированному функции CDinit является 0x000013e6. Итак, чтобы добраться до этой функции, я бы добавил начальный адрес модуля (0x6fc10000) к смещению (0x000013e6), чтобы получить 0x6fc113e6.

Набрав этот адрес в коробку разборки, действительно не подпрыгивает на меня право на начало этой функции.

5
ответ дан 17 December 2019 в 02:28
поделиться

Вы пытались использовать .Net отражатель? Вы можете получить весь код из вашей DLL и, возможно, даже перекомпилировать его с отладкой сообщениями в нем. Это бесплатно:

http://www.red-gate.com/products/reflector/

Ура

0
ответ дан 17 December 2019 в 02:28
поделиться

Делать подобные вещи намного намного проще в WinDbg

uf cards!cdInit
1
ответ дан 17 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: