Спустя почти полгода кропотливой работы я рад представить Вам VB Decompiler v9.0 ! Почему же именно 9.0 а не 8.5? Причин тому несколько. Главная причина в том, что проект был полностью переписан с Visual Basic 6.0 на Delphi XE2. Переписан практически с нуля. Несмотря на то, что многие вещи увы невозможно было портировать как есть — я сделал многое для того, чтобы все функции декомпилятора работали точно так же как и в предыдущей версии или лучше.
Главное чего удалось достичь — полная обратная совместимость! Вы можете скопировать новый EXE файл декомпилятора в папку со старой версей и он будет корректно работать! Все старые базы данных, плагины, база знаний и другие элементы используемые в старых версиях декомпилятора полностью поддерживаются и в новой версии. Поддерживаются несмотря на то, что пришлось писать сложные классы обработки VB структур и VB строк переменной длины в этих структурах чтобы суметь считать и распарсить базы данных, которые изначально были оптимизированы под Visual Basic. Проделано много усилий, но конечная цель, обратная совместимость, достигнута.
Еще одним довольно важным изменением является полная интеграция дизассемблера в проект. Теперь эмулятор и дизассемблер являются частью одного класса, что позволяет значительно ускорить работу эмуляции Native Code в целом. Кстати о скорости — она значительно возросла по сравнению с предыдущими версиями декомпилятора. Тому несколько причин: код декомпилятора значительно оптимизирован, проект скомпилирован в полноценный машинный код, имеется отдельная версия для 64 битной версии Windows. Улучшений масса и на некоторых моментах оптимизации есть смысл остановиться поподробнее.
В версии 9.0 был использован новый TreeView контрол, который в отличии от старого не замедляет свою работу при добавлении большого числа элементов. Это легко заметить при декомпиляции массивных сложных проектов, содержащих огромное количество методов и функций. Если раньше при пролистывании списка процедур в таких файлах шло замедление работы контрола, а при щелчке по элементам происходили подвисания на несколько секунд — теперь это в прошлом! Все работает предельно быстро.
Значительно улучшены функции сохранения и загрузки результатов декомпиляции в базу данных. Добавлено несколько новых полей и скорректировано множество элементов внутреннего формата базы. Это полностью исключает искажение декомпилированного листинга после загрузки его из базы по причине смены языка системы, отсутствия оригинала файла проекта или незаполненных полей с метаданными.
Значительно улучшена эмуляция машинного Native Code. Обработка FPU команд сильно переработана, что наглядно отображено в примере ниже. Исходный код проекта:
Const Test = «Test case2»
Private Sub Form_Load()
Dim d As Double, e As Double
a = &H100
b = &H200
c = Tan(Sin(a) * Cos(b))
MsgBox c, 64, «Test case»
d = 123456.123456
e = Log(c / d + 7654.123)
MsgBox e, 64, Test
End Sub
В версии 8.4 этот код декомпилировался так:
А вот как этот же код декомпилируется в VB Decompiler 9.0 Pro:
Теперь небольшой пример обращения к свойствам класса. Это очередное достижение VB Decompiler 9.0! Обработка обращений к свойствам и методам классов наконец корректно реализована и протестирована на множестве проектов. Данное улучшение пока коснулось только проектов скомпилированных в P-Code, но это уже огромный рывок в декомпиляции Visual Basic программ.
Исходный пример выглядел так:
Private Sub Form_Load()
Dim a As cAttribute
Set a = New cAttribute
a.ID = «Test 2»
a.Description = «Test 1»
MsgBox «12345»
MsgBox a.Description, vbInformation, a.ID
End Sub
Соответственно код cAttribute:
Option Explicit
Private m_ID As Byte
Private m_Description As StringPublic Property Let Description(ByVal vData As String)
m_Description = vData
End PropertyPublic Property Get Description() As String
Description = m_Description
End PropertyPublic Property Let ID(ByVal vData As Byte)
m_ID = vData
End PropertyPublic Property Get ID() As Byte
ID = m_ID
End Property
А теперь сравним декомпилированный код. Для начала как было в VB Decompiler версии 8.4:
А теперь смотрим как этот же участок кода обрабатывается в версии 9.0:
Помимо вышеописанных улучшений добавлены новые функции по обработке блоков условий, циклов, вложенных друг в друга свойств объектов. Корректно генерируются прототипы методов и сложных свойств Let/Get/Set. Улучшен детект GUID‘ов используемых в декомпилируемом проекте внешних DLL и OCX. Всего и не описать в данной презентации. Изменений реально много. Одним из значительных нововведений являются серьезно переработаные функции работы со String References, теперь они корректно работают на проектах любой длины!
Несмотря на такое огромное число изменений и улучшений цена продукта никак не изменилась и по прежнему является доступной практически каждому разработчику программ! Буду рад видеть Вас в числе наших клиентов! А пользователи имеющие активную лицензию могут обновить декомпилятор прямо сейчас из панели управления.