Декомпиляция с заданного адреса

В меню «Утилиты» (Tools) имеется очень полезная функция — «Декомпилировать с VA» (Decompile from VA) (декомпилировать любой код по указанному виртуальному адресу). Основное преимущество этой функции заключается в том, что она не требует корректной структуры файла и его предварительной обработки обычным способом. Конечно, в этом случае код будет декомпилирован с рядом ограничений. Например, если импортированные функции или объекты OLE не были предварительно обработаны, соответствующие фрагменты кода могут оказаться малоинформативными.

Декомпиляция VB Decompiler по адресу

Для декомпиляции конкретного фрагмента кода внутри файла необходимо просто указать виртуальный адрес этого кода (если речь идет о Native Code или сборке .NET), либо указать адрес структуры ProcInfo (если речь идет о классическом Visual Basic P-Code). Особенность работы с P-Code заключается в том, что структура ProcInfo содержит таблицу данных, используемых кодом. Без этой таблицы невозможно определить, с какими функциями работает код, какие строки он использует и так далее. При работе со сборками .NET после ввода адреса декомпилятор предложит выбор между обработкой промежуточного кода MS IL и дизассемблированием машинного кода. Данный вариант обусловлен тем, что .NET-сборки могут содержать как промежуточный код MS IL (управляемый код), так и машинный код (так называемый неуправляемый код).

Если файл уже открыт в декомпиляторе, достаточно вызвать функцию «Декомпилировать с VA» и указать адрес для обработки. Если файл еще не открыт, это будет предложено автоматически, и файл откроется в упрощенном режиме.

Функция «Декомпилировать с VA» особенно полезна, когда нужный код не декомпилируется автоматически или если файл частично поврежден, что препятствует его обработке стандартным способом. Конечно, следует понимать, что результат декомпиляции в этом режиме может быть менее полным, чем при стандартной декомпиляции.