Оптимизация и ускорение работы декомпилятора, а также множество улучшений для .NET в VB Decompiler 11.8
В новой версии декомпилятора проведена большая работа над ускорением работы анализатора и оптимизатора листингов кода. Это та самая функция, включаемая в главном окне программы, оптимизирующая условные 100 строк кода до условных 25, объединяя пошаговую обработку строк, чисел и тд. Эта же функция меняет вереницы If ... GoTo X ... End If на блоки If ... Else ... End If. Удаляет служебный код по созданию объектов и проверки их существования. Убирает объявления временных переменных. В общем, максимально чистит выдачу, делая код нагляднее, понятнее и компактнее.
И все это прекрасно и быстро работает ровно до тех пор, пока не попадаются функции длинной под сотню килобайт бинарного кода и под несколько мегабайт в декомпилированном виде. Естественно такой код не напишет ни один профессиональный программист, а разделит на десятки, а то и сотни функций и классов. Но увы, на Visual Basic пишут не только профессионалы, а компилятор позволяет компилировать любой код. Также никто не отменял сгенерированные блоки кода (из серии пошагового заполнения массива строками в количестве нескольких тысяч). Вот на таком коде декомпилятор (а вернее функция анализатора и оптимизатора кода) мог работать очень долго. Ведь каждая из множества строк оценивается по своему влиянию не весь предыдущий код. А если предыдущих строк несколько тысяч, то обработка занимает довольно продолжительное время.
В новой версии было оптимизировано множество элементов анализатора. Использованы более быстрые функции поиска и замены строк, сведены к минимуму обращения к динамическим массивам и объектам. Это позволило добиться существенного прироста скорости на обработке сложных и больших блоков кода.
Улучшение .NET дизассемблера
Параллельно с декомпиляцией Native Code и P-Code Visual Basic 6.0 ведется большая работа над декомпиляцией .NET приложений. VB Decompiler поддерживает декомпиляцию структур и дизассемблирование CIL кода всех языков .NET семейства (а это C#, Visual Basic, F#, Delphi .NET и другие компиляторы в Common Intermediate Language). В отличии от Visual Basic 5.0 и 6.0, компиляторы у которых не обновлялись много лет, .NET Framework постоянно развивается, расширяя наборы внутренних таблиц и опкодов. И за этим постоянно приходится следить.
В новой версии VB Decompiler проведена работа по расширению поддерживаемых конструкций .NET и исправлено множество несовместимостей.
VB Decompiler наверное единственный декомпилятор, который поддерживает не только CIL managed код в .NET, но и unmanaged машинный код. Причем дизассемблер поддерживает не только Intel x86 32х битный код, но и 64х битный Intel x64. А в новой версии еще проведена работа по поддержке разных видов выравнивания 64х битных функций и корректное определение конца таких функций, если они являются переходником вызова API или по другим причинам сами не возвращают управление на вызывающую функцию.
Обработка строковых данных
Наверное одним из самых полезных функционалов декомпилятора после аналитики является сбор всех строк программы в единый список с возможностью по щелчку перейти к коду, работающему с выбранной строкой. Не так давно была проведена большая работа над тем, чтобы анализ строк производился без полной декомпиляции всего кода, а лишь при поверхностном дизассемблировании. Это существенно ускорило работу, давая возможность получить доступ к списку строк, используя режим быстрой декомпиляции в настройках.
В новой же версии VB Decompiler была серьезно изменена обработка и хранение больших строк. Это дало существенную прибавку в скорости работы.
И конечно, как всегда, были исправлены все найденные нами и нашими пользователями ошибки и добавлен ряд улучшений в интерфейсе.
(C) Сергей Чубченко, разработчик VB Decompiler
* Visual Basic and Visual Studio are registered trademarks of Microsoft Corporation.
Комментарии |
отсутствуют |
Добавление комментария |