Passes¶
xollvm is a toolbox of composable passes. You enable them per function via annotations; the driver runs them in a fixed topological order. All parameters are optional — unspecified keys use their defaults.
The function pipeline¶
expression control flow call post-hardening virtualisation
| Pass | ID | Category | What it does |
|---|---|---|---|
| Constant encryption | constenc |
expr | Encrypts scalar int/FP constant operands into runtime-opaque materializations. |
| MBA | mba |
expr | Rewrites integer expressions as Mixed Boolean/Arithmetic equivalents. |
| Substitution | substitution |
expr | Replaces instructions with equivalent idiom sequences. |
| Virtual call | vcall |
call | Virtualises direct calls via synthetic vtables. |
| Basic-block split | split |
cfg | Splits blocks to increase graph complexity. |
| Semantic diffusion | sdiff |
expr | Volatile-slot masking that resists local simplification. |
| Bogus control flow | bcf |
cfg | Opaque predicates + fake edges. |
| CFG flattening | flattening |
cfg | Replaces structured control flow with a dispatcher. |
| Anti-optimization shield | shield |
post | Volatile barriers + opaque identities. |
| Anti-decompiler | adec |
post | indirectbr trampolines, asm junk, pointer aliasing. |
| Code virtualisation | vm |
vm | Compiles the function body into a private bytecode stream. |
Module-only passes (run before the function pipeline):
| Pass | ID | What it does |
|---|---|---|
| Function merging | fmerge |
Collapses same-group= functions into one selector-dispatched super-function. |
| String encryption | strenc |
Encrypts string literals; AES-128-CTR / ChaCha20 / XOR. |
Picking passes¶
- New here? Start with the strategy bundles.
- Matching passes to an attacker? See Choosing passes.
vmis its own section — the Virtualization deep-dive.
vm conflicts with flattening
Both restructure the whole CFG. Use one or the other per function; the pipeline rejects the combination.