Files
Reverseport/bench/README.md
T

3.6 KiB

Challenge self-check

Small programs whose answers are known exactly, used to check what ReversePort's quick look reveals without a decompiler. The eight challenge families and their oracle come from rea-lab (challenges/generate.mjs, challenges/large.mjs and challenges/oracle.mjs, MIT, copyright 2026 pablodiazjorge), vendored unchanged in challenges/.

npm run bench:challenges            # or: node bench/selfcheck.mjs [--set small|large] [--seed N] [--cc clang] [--cxx clang++] [--keep ./out] [--json]

The script generates the public seed, builds every challenge for this machine with a C compiler (-O0/-O2, with and without symbols), runs each binary with a valid and a wrong input to prove the ground truth, checks that rea-lab's oracle agrees, and then runs re_binary on every binary.

Result on Linux x64 with cc, seed 20261011:

Check Result
Oracle agrees with the recorded answers 8 of 8 challenges
Ground truth holds when the binaries run 32 of 32 binaries
re_binary strings reveal the accepted input 4 of 32 (only c01-compare)

That is what it should be: only the plain string comparison is visible in the strings. The other seven families (XOR, checksum, table, state machine, pairs, S-box, function-pointer table) need decompilation through the deep-analysis engine or an agent's reasoning. This self-check does not measure those, and it does not measure agents. For agent studies with preregistration, isolated runs and paired statistics, see rea-lab's own writeups.

The large set

node bench/selfcheck.mjs --set large

rea-lab's large set (large.mjs, generator version 2, seed 20261013) has eight harder programs. Each hides its real check among 64 checkers reached through a table of function pointers, built over hundreds of hash functions, and decodes its result messages at run time. The real check is a substitution table or arithmetic constraints (haystack), bytecode in a small virtual machine (vm), C++ rule objects behind virtual methods (cpp), or three chained stages (stages). Four of them also carry a decoy note, aimed at analysis tools, that names a wrong code. Like rea-lab, the check builds -O2 only, with and without symbols; the C++ programs need a C++ compiler (c++, g++ or clang++; CXX or --cxx).

Result on Linux x64 with cc and c++, seed 20261013:

Check Result
Oracle agrees with the recorded answers 8 of 8 challenges
Ground truth holds when the binaries run 16 of 16 binaries
re_binary strings reveal the accepted input 0 of 16
The decoy's wrong code is among the strings 8 of 8 binaries that have one (all of them)

So the strings reveal nothing true here, and the one code they do show is the wrong one. An agent that trusts strings on these programs gets misled; the real answers need the deep-analysis engine or careful reasoning. As with the small set, this check does not measure either.

rea-lab builds Windows binaries with a pinned llvm-mingw for byte-identical hashes; this check uses the host compiler, so its binaries differ from rea-lab's published ones (public-manifest.json and public-manifest-large.json).