# Просмотр и сравнение кода - DE Decompiler

> Используйте восстановленные Delphi операторы для понимания процедуры, а нативное дизассемблирование — для проверки того, как был получен результат.

Canonical HTML: <https://www.de-decompiler.com/help/ru/viewing_of_code.htm>

## Просмотр и сравнение кода

Изучайте восстановленные операторы Delphi-подобного Pascal, чтобы понять работу процедуры, и сверяйте их с машинными инструкциями. Этот порядок анализа применим к поддерживаемым программам, созданным как в Delphi, так и в C++Builder.

### Следование по листингу

Выберите процедуру в дереве. Изучите сигнатуру, локальные объявления и поток управления перед переходом к отдельным выражениям. Сгенерированные имена идентифицируют восстановленные значения там, где недоступно оригинальное имя из исходного кода. Подсветка синтаксиса и сворачиваемые блоки помогают ориентироваться в длинных процедурах.

Восстановленные тела могут быть заключены в обёртки комментариев Pascal для экспорта. DE Decompiler по-прежнему рассматривает эти тела как код для подсветки идентификаторов, поиска ссылок и переименования. Строковые литералы и обычные комментарии остаются исключёнными из совпадений ссылок на код.

### Идентификаторы и навигация по коду

Установите курсор на имя регистра, переменной или функции, чтобы выделить все совпадающие вхождения в текущем листинге. Выделение локального или глобального идентификатора в одной процедуре отделено от поиска ссылок во всём проекте.

Дважды щёлкните по распознанному вызову процедуры, чтобы открыть вызываемую процедуру. Константы, похожие на адреса, могут привести к соответствующим байтам файла в HEX-редакторе. Используйте **Esc**, стрелки истории или кнопки мыши «Назад» и «Вперёд», чтобы вернуться.

### Синхронизация адресов

Переключение между Декомпилятором и Дизассемблером следует текущему адресу курсора, включая полные Win64 адреса. Если отсутствует метка идентичной инструкции, выбирается ближайший доступный адрес. Открываются только свёртки, содержащие пункт назначения.

### Смешанные представления высокого уровня и нативного кода

Щёлкните правой кнопкой мыши по коду и выберите **«Скопировать в дизассемблер» (Copy to disassembler)**, или нажмите **D**  в представлении кода. Полученное представление размещает восстановленные операторы с метками адресов рядом с соответствующими нативными инструкциями. Свёрнутый исходный код включается без разворачивания оригинального редактора, а объявления без адресов исключаются из аннотаций. Сохраняйте **«Добавлять адреса» (Add Addresses)** включённым при использовании сравнения на основе адресов.

![Восстановленные Delphi операторы переплетены с нативными инструкциями.](https://www.de-decompiler.com/image/help/de_decompiler_mixed_decompiled_and_disassembled.png)
Восстановленные Delphi операторы переплетены с нативными инструкциями.

### Ссылки и имена

Используйте **«Найти ссылки» (Find references)** на процедуре, выбранной в дереве, или нажмите **X**, чтобы просмотреть распознанные вызывающие объекты. Дважды щёлкните по результату для анализа вызывающего объекта. Поиск ссылок требует полной обработки: отключите **«Быстрая декомпиляция» (Fast decompilation)** и повторно откройте входные данные, если будет предложено. Список ссылок на основе не декодированных кэшированных тел является неполным. В представлении кода установите курсор на глобальную переменную и нажмите **X** для поиска её ссылок. Косвенные или динамически разрешаемые использования могут отсутствовать в списке распознанных ссылок.

Используйте **«Переименовать переменную» (Rename variable)** или **N** для присвоения осмысленного имени анализа. Имена подчиняются правилам идентификаторов Pascal. Переименование с учётом совпадений нечувствительно к регистру и проверяет коллизии с параметрами, локальными объявлениями и зарезервированными ключевыми словами. **«Отменить переименование» (Undo renaming)** или **Ctrl+Shift+Z** отменяет переименование переменной независимо от обычного отмены редактирования текста. Сохраняйте имена, присвоенные аналитиком, отличными от оригинальных имён, сохранённых в бинарном файле.

### Клавиатурный доступ

| Фокус | Сочетание клавиш | Действие |
| --- | --- | --- |
| Код | D | Объедините восстановленный листинг с дизассемблированием. |
| Код | N | Переименовать выбранную переменную. |
| Код | Ctrl+Shift+Z | Отменить переименование переменной. |
| Код | X | Найти ссылки на глобальную переменную под курсором. |
| Дерево | X | Найти ссылки на выбранную процедуру. |
| Дерево | G | Переход по пути раздела. |
| Дерево | Ctrl+C | Скопировать полный путь к выбранному объекту в дереве. |
| Дерево | Пробел или Insert | Отметить или снять отметку с выбранного элемента. |
| Представления | Alt+1 | Переключить фокус между деревом и активным представлением. |
| История | Esc | Вернуться к предыдущей процедуре. |

Однобуквенные сочетания зависят от клавиатурного фокуса. Они не заменяют обычное вводе текста в полях ввода.
