# Decompilation processing - DE Decompiler

> Native-code decompilation reconstructs Delphi-like statements from machine instructions and available metadata; processing options control how the resulting listing is represented.

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

## Decompilation processing

Native-code decompilation reconstructs Delphi-like Pascal from machine instructions and available metadata. The same processing options apply to supported applications written in Delphi or built with C++Builder.

### Reconstructed program logic

The decompiler recovers conditions, `case` blocks, loops and calls, including recognized VCL methods. Source-level names and types depend on the information retained in the binary. Generated variable names, inferred structure layouts and calls without recognized VCL names are normal consequences of native-code reconstruction. See [Interpreting recovered code](https://www.de-decompiler.com/help/validation.htm) for details.

![Controls for decompilation processing.](https://www.de-decompiler.com/image/help/options_decompilation.png)
Controls for decompilation processing.

### Delphi expressions and runtime operations

Recognized control flow includes `if/else`, `case`, `for`, `while` and `repeat/until`, with `Break` and `Continue` where the native branches establish their meaning.

Available RTTI, class metadata and signatures support object fields, properties, virtual methods, VCL calls and imported Windows API calls. Common RTL operations can be represented as Delphi string expressions, `Length`, `Copy`, `Delete`, `Insert`, array resizing and indexing, Variant-array access, and `TextFile` input operations.

These transformations depend on recognized types, calling conventions and data flow. Where the evidence is insufficient, the listing retains explicit calls, pointers or branches. Generated semantic variable names describe inferred roles and are not recovered original identifiers.

### Stack parameters and optimization

**Parse stack parameters** contributes to reconstruction of calls and higher-level expressions. **Procedure analyzer and optimizer** simplifies recognized expression and control-flow patterns. Compare the resulting listing with these controls disabled when an expression or branch is unclear.

### Control-flow processing

**Process If ... End If blocks (Native Code)** reconstructs recognized conditional jumps as high-level conditional blocks. **Process 'Else' blocks** adds heuristics for Else branches and requires If-block processing. Compare these controls enabled and disabled when investigating an ambiguous branch.

### Prototypes and addresses

**Analyze prototypes** performs preliminary heuristic analysis of procedure arguments and return values. It is useful in Fast decompilation mode when private functions lack explicit signature metadata. This analysis takes additional initial processing time. Check inferred signatures against callers and native instructions when they affect an analysis conclusion.

**Add Addresses** retains virtual addresses in the high-level listing for comparison and navigation. Keep it enabled for **Copy to disassembler**. The Disassembler displays addresses independently of this setting.

When output is cached or the complete project has already been processed, reopen or reprocess the input after changing the relevant settings.
