Diagnostics¶
Three diagnostic passes plus two verbosity flags tell you exactly what the obfuscator resolved, ran, and skipped — use them before assuming a bug.
obf-dump-config¶
Prints the resolved per-function config and derived seeds. The fastest check that your annotation grammar is valid and the passes you expect are enabled with the options you set:
If a pass you annotated isn't listed, the annotation didn't parse — check parenthesis balance and key names (keys use no dashes).
obf-metrics¶
Emits per-function JSONL metrics (instruction counts, cyclomatic complexity, etc.):
Run it on the input and the output to measure a pass's impact.
obf-verify¶
-obf-verify runs IR verification before/after each stage, so an invalid transform is reported at
the pass that produced it rather than as a mysterious downstream crash. Keep it on while developing an
annotation set.
-obf-verbose¶
Prints parsing decisions, skip reasons, budget utilisation, and the resolved pipeline order. The first thing to reach for when a function is "unexpectedly not obfuscated":
Full reports¶
For CFG snapshots and the HTML viewer, use -obf-report-dir — see
Reports & CFG visualization.
Common questions → which tool¶
| Question | Tool |
|---|---|
| Did my annotation parse? Which passes are enabled? | obf-dump-config |
| Why was this function skipped? | -obf-verbose (skip reasons) |
| How much did a pass grow the function? | obf-metrics (before/after) or report JSON |
| Which pass produced invalid IR? | -obf-verify |
| What did the CFG look like after each pass? | -obf-report-dir + HTML viewer |
| Was output reproducible? | fixed -obf-seed + diff (see reproducible builds) |