Похоже, вы могли бы использовать смесь Relector и Debugger, чтобы иметь возможность отлаживать любое приложение .NET БЕЗ наличия исходного кода. Это возможно? Кто-нибудь видел это раньше?
Можно ли использовать Reflector для получения исходного кода приложения, а затем выполнять отладку с использованием этого исходного кода?
Ответы (7)
Reflector Pro позволяет вам сделать именно это!
Подключаемый модуль Deblector для Reflector позволяет выполнять отладку прямо из Reflector.
Я пробовал это давным-давно без успеха. С тех пор Reflector значительно улучшился, поэтому я думаю, что это возможно сегодня.
Это на самом деле немного страшно, если подумать. Кто-то может декомпилировать ваше приложение и получить полный код, а затем изменить его и распространить свою собственную версию. Все без открытого исходного кода. Но опять же, именно поэтому «они» создали обфускаторы.
Я не могу найти ссылку, но кто-то использовал исходный код рефлектора для компиляции отладочной версии фреймворка 1.1, через который можно пройти. Я попробовал с фреймворком 2.0 и обнаружил слишком много ошибок, чтобы оно того стоило.
Если вы хотите попробовать это, начните с плагина, такого как FileDisassembler. . В моем кратком опыте с этим я обнаружил, что есть некоторые ошибки, которые нужно исправить, но не так уж плохо.
С библиотекой малого и среднего размера этот метод должен быть очень выполним.
Нет, вам нужен файл символов (.PDB), принадлежащий приложению, которое вы пытаетесь отлаживать.
Reflector позволяет вам перейти от IL к читаемому коду .NET, но он сохраняет только смысл, а не точный код, написанный разработчиком. Таким образом, даже если бы у вас была PDB и исходный код из Reflector, это не совпало бы для отладки.
Я полагаю, вы могли бы использовать исходный вывод из рефлектора для создания проекта .NET и создания собственной версии сборки, которую вы хотите отлаживать. Однако обычно это настоящая боль, и в случае с .NET framework Microsoft публикует отладочную информацию для использования всеми, кто в этом заинтересован.
Я помню, что в какой-то момент в Reflector был плагин для отладки, но я так и не смог заставить его работать.
Настройка Visual Studio для отладки исходного кода .NET Framework
MSDN: файлы PDB
Я видел это и делал это раньше. Я использовал его, чтобы показать своему боссу, что наше приложение не так защищено, как он думал. Взял DLL, получил исходный код и бац — у него чуть не случился сердечный приступ.
Бывают ситуации, когда .Net Reflector выходит из строя, но это сложно сделать — я знаю, потому что активно пытался. Хорошие обфускаторы сделают код настолько неуправляемым/нечитаемым (например, перегружая функцию «а» для выполнения множества различных действий на основе параметров), что просмотр исходного кода не принесет вам никакой пользы, но вы все равно сможете отладить — удачи в вычислении что происходит.
Это возможно, но не очень практично в более крупных и сложных приложениях, особенно когда используется множество более поздних структур, таких как лямбда-выражения и инициализаторы (вы получаете целую кучу имен переменных, содержащих знаки доллара, такие как CS $ 4 $ 0000, которые должны быть исправлены вручную) . Даже простые операторы switch могут привести к очень уродливому спагетти-коду, полному операторов goto в Reflector.
Мне гораздо больше повезло с декомпиляцией в MSIL и перекомпиляцией в режиме отладки. Затем вы можете поместить точки останова в файлы IL и использовать все обычные функции отладчика в VS. Поначалу MSIL выглядит немного пугающе, но вы быстро освоитесь.
В этой превосходной статье объясняется, как это сделать: http://www.codeproject.com/KB/dotnet/Debug_Framework_Classes.aspx