Можно ли использовать Reflector для получения исходного кода приложения, а затем выполнять отладку с использованием этого исходного кода?

Похоже, вы могли бы использовать смесь Relector и Debugger, чтобы иметь возможность отлаживать любое приложение .NET БЕЗ наличия исходного кода. Это возможно? Кто-нибудь видел это раньше?


person skb    schedule 20.09.2008    source источник


Ответы (7)


Reflector Pro позволяет вам сделать именно это!

person Mel Harbour    schedule 14.04.2010

Подключаемый модуль Deblector для Reflector позволяет выполнять отладку прямо из Reflector.

person Alex Lyman    schedule 20.09.2008

Я пробовал это давным-давно без успеха. С тех пор Reflector значительно улучшился, поэтому я думаю, что это возможно сегодня.

Это на самом деле немного страшно, если подумать. Кто-то может декомпилировать ваше приложение и получить полный код, а затем изменить его и распространить свою собственную версию. Все без открытого исходного кода. Но опять же, именно поэтому «они» создали обфускаторы.

person Chris Pietschmann    schedule 20.09.2008
comment
Именно поэтому они создали EULA. - person TraumaPony; 20.09.2008

Я не могу найти ссылку, но кто-то использовал исходный код рефлектора для компиляции отладочной версии фреймворка 1.1, через который можно пройти. Я попробовал с фреймворком 2.0 и обнаружил слишком много ошибок, чтобы оно того стоило.

Если вы хотите попробовать это, начните с плагина, такого как FileDisassembler. . В моем кратком опыте с этим я обнаружил, что есть некоторые ошибки, которые нужно исправить, но не так уж плохо.

С библиотекой малого и среднего размера этот метод должен быть очень выполним.

person Brownie    schedule 20.09.2008
comment
Учитывая, что в NET Framework довольно много нативных реализаций C, я нахожу это очень маловероятным. - person stephbu; 20.09.2008
comment
Я не предлагаю вам перейти к реализациям C, но если вы перекомпилируете исходный код .NET, нет никаких причин, по которым вы не могли бы перейти к коду, который вызывает собственный код. - person Brownie; 29.09.2008

Нет, вам нужен файл символов (.PDB), принадлежащий приложению, которое вы пытаетесь отлаживать.

Reflector позволяет вам перейти от IL к читаемому коду .NET, но он сохраняет только смысл, а не точный код, написанный разработчиком. Таким образом, даже если бы у вас была PDB и исходный код из Reflector, это не совпало бы для отладки.

Я полагаю, вы могли бы использовать исходный вывод из рефлектора для создания проекта .NET и создания собственной версии сборки, которую вы хотите отлаживать. Однако обычно это настоящая боль, и в случае с .NET framework Microsoft публикует отладочную информацию для использования всеми, кто в этом заинтересован.

Я помню, что в какой-то момент в Reflector был плагин для отладки, но я так и не смог заставить его работать.

Настройка Visual Studio для отладки исходного кода .NET Framework
MSDN: файлы PDB

person Eric Schoonover    schedule 20.09.2008

Я видел это и делал это раньше. Я использовал его, чтобы показать своему боссу, что наше приложение не так защищено, как он думал. Взял DLL, получил исходный код и бац — у него чуть не случился сердечный приступ.

Бывают ситуации, когда .Net Reflector выходит из строя, но это сложно сделать — я знаю, потому что активно пытался. Хорошие обфускаторы сделают код настолько неуправляемым/нечитаемым (например, перегружая функцию «а» для выполнения множества различных действий на основе параметров), что просмотр исходного кода не принесет вам никакой пользы, но вы все равно сможете отладить — удачи в вычислении что происходит.

person torial    schedule 20.09.2008

Это возможно, но не очень практично в более крупных и сложных приложениях, особенно когда используется множество более поздних структур, таких как лямбда-выражения и инициализаторы (вы получаете целую кучу имен переменных, содержащих знаки доллара, такие как CS $ 4 $ 0000, которые должны быть исправлены вручную) . Даже простые операторы switch могут привести к очень уродливому спагетти-коду, полному операторов goto в Reflector.

Мне гораздо больше повезло с декомпиляцией в MSIL и перекомпиляцией в режиме отладки. Затем вы можете поместить точки останова в файлы IL и использовать все обычные функции отладчика в VS. Поначалу MSIL выглядит немного пугающе, но вы быстро освоитесь.

В этой превосходной статье объясняется, как это сделать: http://www.codeproject.com/KB/dotnet/Debug_Framework_Classes.aspx

person Nathan Baulch    schedule 20.09.2008