NAME=help
FILE=-
CMDS=<<EOF
L ../src/r2/core_flutter.dylib
L ../src/r2/core_flutter.so
r2flutter -h
?e ===
r2flutter
EOF
EXPECT=<<EOF
Usage: r2flutter [qjr*] <action>
| r2flutter -A[AA]   analyze dart snapshot and apply flags/comments
| r2flutter -c[jr*]  dump classes
| r2flutter -C       apply Dart classes, fields, methods and types
| r2flutter -D prof  override Dart snapshot profile by hash or version
| r2flutter -E[jr*]  dump Dart code entrypoint
| r2flutter -f[jr*]  dump recovered functions
| r2flutter -H[HH]   dump Dart AOT snapshot header info
| r2flutter -i[jr*]  dump instruction table entries
| r2flutter -ie[jr*] dump Dart code entrypoint; with -r/-* mark instruction snapshots as dword arrays
| r2flutter -l N     limit function/instruction-table/xref output
| r2flutter -m file  load Flutter obfuscation map JSON
| r2flutter -n       use heuristic name-pool fallback; names may be wrong
| r2flutter -O spec  decode a tagged pointer, PP slot, or snapshot ref:N
| r2flutter -p[jr*]  print reconstructed ObjectPool PP value
| r2flutter -R       dump full radare2 script (like standalone -R)
| r2flutter -S[jr*]  dump best-effort recovered SBOM/components
| r2flutter -T[jr*]  dump string-based type names
| r2flutter -x[jr*]  dump metadata/data-image xrefs; with -z, include string refs/ax in -r/-*
| r2flutter -z[jr*]  dump reliable ObjectPool-referenced strings
| r2flutter -zz[jr*] dump all fuzzy/carved strings (-xzz includes refs/ax in -r/-*)
| r2flutter -h       show this help
| r2flutter -v       increase parser verbosity
| r2flutter -V       show version
Modifiers: q=quiet, j=json, r/*=r2 commands
===
Usage: r2flutter [qjr*] <action>
| r2flutter -A[AA]   analyze dart snapshot and apply flags/comments
| r2flutter -c[jr*]  dump classes
| r2flutter -C       apply Dart classes, fields, methods and types
| r2flutter -D prof  override Dart snapshot profile by hash or version
| r2flutter -E[jr*]  dump Dart code entrypoint
| r2flutter -f[jr*]  dump recovered functions
| r2flutter -H[HH]   dump Dart AOT snapshot header info
| r2flutter -i[jr*]  dump instruction table entries
| r2flutter -ie[jr*] dump Dart code entrypoint; with -r/-* mark instruction snapshots as dword arrays
| r2flutter -l N     limit function/instruction-table/xref output
| r2flutter -m file  load Flutter obfuscation map JSON
| r2flutter -n       use heuristic name-pool fallback; names may be wrong
| r2flutter -O spec  decode a tagged pointer, PP slot, or snapshot ref:N
| r2flutter -p[jr*]  print reconstructed ObjectPool PP value
| r2flutter -R       dump full radare2 script (like standalone -R)
| r2flutter -S[jr*]  dump best-effort recovered SBOM/components
| r2flutter -T[jr*]  dump string-based type names
| r2flutter -x[jr*]  dump metadata/data-image xrefs; with -z, include string refs/ax in -r/-*
| r2flutter -z[jr*]  dump reliable ObjectPool-referenced strings
| r2flutter -zz[jr*] dump all fuzzy/carved strings (-xzz includes refs/ax in -r/-*)
| r2flutter -h       show this help
| r2flutter -v       increase parser verbosity
| r2flutter -V       show version
Modifiers: q=quiet, j=json, r/*=r2 commands
EOF
RUN
