twinBASIC / native x86 and x64 · own runtime · no VB header

twinBASIC decompiler: real names, real forms, from a modern native EXE.

twinBASIC is Visual Basic's modern successor, and its executables are unlike any VB6 file: a native 32- or 64-bit PE with its own statically linked runtime, no VB5! header and no P-Code. What they do carry — and what no VB6 native EXE gives us — is the compiler's own reflection tables. Our twinBASIC decompiler reads them to recover every form, control, procedure and parameter by its real name, and delivers a project that compiles.

See a real twinBASIC recovery, Item Viewer, next to its original source →

// under the hood

What a twinBASIC EXE leaves behind

Four structures carry the project. Member metadata in the data section lists every interface's members by name (lightly encoded — the newer compiler XORs each byte with a constant). A function table gives the exact entry point and byte length of every procedure, runtime included. The form designer is a DEFLATE-compressed blob, which is why a strings search of a twinBASIC EXE finds no caption or control name anywhere; the engine inflates it with its own port of zlib's reference decoder. And a string literal pool holds the program's strings in BSTR layout. Both compiler generations and both bitnesses are handled — the x86 and x64 builds of the same project export a byte-identical form file.

// what comes back

What the twinBASIC decompiler brings back

  • ✓

    Names, everywhere the file has them

    Classes, forms, controls, procedures and parameters exactly as written — 219 of 219 parameter names on the corpus, none wrong — with return types, Public / Private and argument counts exact.

  • ✓

    Complete forms

    Every control's class, parent, position, size and caption; menus; embedded images extracted byte-exact; an imported ActiveX control's property bag.

  • ✓

    Structure and calls

    The call graph (389 procedures checked against source, 0 differences), the Declare table with each call site's arguments in body order, and 1,476 runtime calls named — List1.Clear, Text1.Text = ... — with 0 wrong.

  • ✓

    A project that compiles

    .vbp, one .frm per form and a .frm.twin carrying the attribute GUIDs, plus a recovery report. All ten exported benchmark projects compile.

// measured

Measured on eleven twinBASIC binaries

MetricResult
Procedure addresses bound / checked against ground truth318 bound · 89 checked · 0 wrong
Procedure headers exact (visibility and arity)321
Parameter names · return types · runtime-call names219/219 · 206 checked · 1,476 checked — 0 wrong
Designer and procedure recovery, ItemViewer (both compiler generations)55 of 55 · 21 of 21
Procedure bodies lifted to statements240 procedures · 2,663 lines = 53.7% of the source's statements

See the Item Viewer recovery →

// the fine print

Where code reconstruction stands

Forms and names: done. Statement-level code: the frontier

twinBASIC procedure bodies are native machine code with no P-Code, so code comes back through a lifter that currently emits about half of the statements as code and the rest as annotated walker comments, mostly around COM object plumbing. Local variable names, type and field names, module-level globals, constant names and comments are not in the file at all. Property names beyond name, geometry and caption are still being decoded. The free evaluation spells out exactly what your program yields today.

// how to decompile your program

Three ways to get from the EXE to source

STEP 01

Confirm the format

Run the free VBScanner on the folder. It reads the file headers and tells you what built each EXE, DLL or OCX and whether it is P-Code, native or IL.

STEP 03

…or let us do it

Request a free evaluation. We examine the binary, tell you exactly what comes back, and quote a fixed price and timeline. Hand-finishing of anything the engine marks is included.

// questions

twinBASIC decompiler questions

Can a twinBASIC EXE be decompiled at all?

Yes: the forms, menus, class and procedure structure and every name come back exactly, because the compiler leaves its reflection tables in the file. Procedure bodies are native code and are partially reconstructed today.

Does it handle 64-bit twinBASIC builds?

Yes. Both 32-bit and 64-bit builds are read, and the same project exported from each is byte-identical.

What do I get for the code?

Procedure headers with real names and types, the call graph, Declare call sites and named runtime calls in body order, and structured statements where the lifter can prove them, with the rest clearly marked rather than guessed.

// other formats

Every generation of Basic has its own page

Ready to decompile your twinBASIC program?

The evaluation is free and tells you exactly what your binary yields before you spend anything. Or license the decompiler and run it in-house today.

free evaluation fixed quotes NDA available software from $299