Я использую Visual Studio 2008 для разыскивания ошибки в процессе выполнения. Я присоединил к процессу и определил модуль интереса. (Это происходит, что отладочные символы для этого модуля были загружены из pdb файла.) Я хочу показать демонтированный код в окне Disassembly так, чтобы я мог решить, где установить точку останова.
Когда я повреждаю процесс, в настоящее время выполняющийся модуль показывают в окне Disassembly. К сожалению, это не модуль интереса. Я не могу выяснить, как показать код для модуля интереса, в то время как он не выполняется.
Предполагая, что вы отладки неуправляемого процесса ...
Когда вы «отладки / разбиваете все», выполните следующие действия:
Выберите «Отладка / Windows / Module», чтобы получить список всех загруженных модулей. Под столбцом «Адрес» в окне модулей является диапазон памяти для этого модуля. В окне «Адрес:» в вашем окне разборки введите адрес запуска для модуля (убедитесь, что добавьте 0x до номера)
Теперь вы должны быть в начале модуля, с которым вы хотите играть. Если вы знаете адрес функции, вы можете просто перейти к этому адресу.
Вот пример:
запустить SOL.EXE Прикрепите к процессу и разбейте все. Посмотрите на модули, и найдите «Cards.dll», вы увидите его нагрузки на 6FC10000 (на моем машине, в любом случае).
Введите этот адрес (0x6fc10000) в окно разборки, и он приведет вас к началу модуля.
Теперь сказать, что хочу на самом деле перейти к функции. Откройте DLL в Walker (Defends.exe), чтобы получить смещения функций. В моем примере я хочу установить точку останова на функцию «CDInit». В зависимости от Walker, он показывает, что смещение к экспортированному функции CDinit является 0x000013e6. Итак, чтобы добраться до этой функции, я бы добавил начальный адрес модуля (0x6fc10000) к смещению (0x000013e6), чтобы получить 0x6fc113e6.
Набрав этот адрес в коробку разборки, действительно не подпрыгивает на меня право на начало этой функции.
Вы пытались использовать .Net отражатель? Вы можете получить весь код из вашей DLL и, возможно, даже перекомпилировать его с отладкой сообщениями в нем. Это бесплатно:
http://www.red-gate.com/products/reflector/
Ура
Делать подобные вещи намного намного проще в WinDbg
uf cards!cdInit