Руководство пользователя

(руководство описывает сборку 080215)

Декомпилятор Hex-Rays - Быстрый старт

Давайте начнём с очень короткой и простой функции:

Мы декомпилируем её путём выполнения команды меню View, Open subviews, Pseudocode (рус. Вид, Открыть представления, Псевдокод) (вызывающая клавиша F5):

Так как нужен сгенерированный код на Си, то такой результат не симпатичен. В тексте имеет место много операций приведения, что приводит его в беспорядок. Причиной тому является временное невыполнение декомпилятором восстановление типов. Очевидно, что параметр a1 указывает на структуру, но декомпилятор пропустил её. Давайте добавим немного информации о типе в базу данных и посмотрим, что получится. Для этого мы откроем окно Structure1 (рус. Структура) (Shift-F9) и добавим новый тип - структуру: 

После этого мы переключимся на окно псевдокода и укажем тип a1. Мы можем сделать это, поместив курсор на любое вхождение a1 и нажав Y:

Когда мы нажмём на клавишу Ввод, вывод декомпилятора станет намного лучше:

Но возможности для усовершенствования всё ещё существуют. Мы можем переименовать поля структуры и определить их типы. Например, field_6B1, кажется, используется как счётчик, а field_6B5 - очевидно, указатель на функцию. Мы можем сделать всё это без переключения между окнами. Потребуется только окно Structure2 для начального определения структуры. Вот как мы определяем тип поля для указателя на функцию: 

Конечный результат выглядит следующим образом:

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


1. Текущая версия IDA требует переключения к представлению исходного текста на ассемблере перед открытием окна Structure (рус. Структура), иначе возникнет нарушение прав доступа.
2. Это не совсем так. Фактически, мы можем ввести полное определение структуры в диалоговое окно типа, но это проблематично, так как поле для ввода однострочное. Мы также можем определить новые типы при помощи команды File, Load file, Parse C header file (рус. Файл, Загрузить файл, Разобрать заголовочный файл Си).