iretable-tools cover: a Cheat Engine .CT box linked to an orange .iretable box

iretable-tools logoiretable-tools

Command-line toolkit for Pointer Lab project files
Price
Free
Version
1.0.1
Platform
Windows
License
MIT
Free & Open Source Pointer Lab Cheat Engine Import Command Line C++20
Pointer Lab saves your work as an .iretable project file: the address list, its pointer chains, the value types, structures and scripts. iretable-tools works with those files from the command line. It converts a Cheat Engine .CT table into one, and exports back to .CT where the fields map. Every field that does not carry across is listed, so a lossy import is never silent. It also diffs two tables, shifts fixed addresses after the main module moves, and lints a file for problems before you open it. It touches files on disk only. It never opens a process.
Free
Command-line tool for Windows. iretable.exe needs nothing else installed
↓ Download from GitHub View Source on GitHub
Developer
Game Reversal Club
Open Source Software

See all software from this developer

What You Get

Point iretable lint at a table and it lists every problem it finds, then exits with a non-zero code. This is real output, from tests/fixtures/malformed.iretable, a deliberately broken table the tests use.

$ iretable lint broken.iretable
line 2: orphan-field: Field comes before any struct record; ignoring it.
line 3: bad-hex: Unreadable id or address; skipping that entry.
line 4: unknown-type: Unknown value type "weirdtype"; skipping that entry.
line 5: malformed-chain: Malformed pointer chain; keeping the entry as a fixed address.
duplicate-id: Duplicate entry id 4.
frozen-no-value: Entry 4 is frozen but has no frozen value.
6 problem(s) found.
$ echo $?
1

Each line names the problem and what the reader does about it: ignore the field, skip the entry, or keep it as a fixed address. The exit code is 1 when a file has problems, so lint drops straight into a script or a pre-commit check.

How It Works

The same format as Pointer Lab
Headers 1, 2 and 3 all load, with the full escaping rules and every record type. The writer produces Pointer Lab’s canonical form byte for byte, so a file this tool writes is one Pointer Lab reads without complaint. A UTF-8 byte-order mark before the header is tolerated.
Nothing lost on a round-trip
A record type from a newer Pointer Lab is kept verbatim and written back. Pointer Lab itself only skips these. lint reports them as notes, not problems.
Cheat Engine in and out
convert reads a .CT address list and keeps descriptions, value types, static addresses and pointer offset chains. Cheat Engine groups become entry groups, and the offsets Cheat Engine stores in reverse are put back base-first. export writes a .CT where the records map.
Loud about what does not map
Every field with no home in the other format is printed to stderr as a lossy: line. On import these are usually hotkeys, freeze state and auto-assembler scripts. On export they are symbols, scripts, structures, freeze state and hotkeys.
Rebase knows what moves
Fixed addresses shift by the difference between the old base and the new one. So does the base of any pointer chain that starts at a fixed address. Entries rooted at a module are left alone, because they are stored relative to the module and survive a relocation on their own.
Built for scripts
diff matches entries by description and location and names each changed field. diff and lint return 1 when there are differences or problems and 2 on a read error. --json on show, diff and lint gives the same results as JSON. On convert it prints the entry count and the lossy notes as JSON.

Item Specifics

Name
iretable-tools
Author
Heath Howren (“Cyborg Elf”)
Version
1.0.1 (2026)
Type
Command-line toolkit for Pointer Lab .iretable project files
Platform
Windows (x64)
License
MIT License
Price
Free
Language
C++20
File formats
Pointer Lab .iretable (headers 1, 2 and 3) and Cheat Engine .CT
Dependencies
None at run time. The .CT reader is a small hand-written XML parser. The tests use Catch2 3.5.2
Distribution
iretable-tools-v1.0.1-windows-x64.zip, with iretable.exe
Requirements
Nothing else installed: the C runtime is linked statically. To build: Visual Studio 2022 with the C++ workload (MSVC v143) and CMake 3.28 or newer
Tests
36 unit tests (Catch2), run in CI in Debug and Release
Source Code

Features

Reads .iretable versions 1, 2 and 3
Writes Pointer Lab’s canonical form
Byte-for-byte round-trips
Unknown records kept verbatim
UTF-8 byte-order mark tolerated
Cheat Engine .CT import
Pointer offsets put base-first
Cheat Engine groups become entry groups
Export back to .CT
Lossy fields listed on stderr
Entry-level diff
Changed fields named
Rebase after a module move
Module-rooted chains left alone
Lint for malformed lines and bad hex
Unknown value types and broken chains
Duplicate ids and frozen entries with no value
Exit codes for scripts and pre-commit checks
--json output
Never opens a process
No runtime dependencies
36 unit tests, run in CI

Before You Download

Intended use. iretable-tools is for tables made while studying software you own or are authorized to analyze: your own programs, single-player games and CTF binaries. The tool itself never opens a process, but the tables it edits are for Pointer Lab, which does. Using a memory scanner against online or competitive games will very likely trip anti-cheat software and get the account banned. This is a research tool.

A file tool only. It does not attach to, read or modify any process. It does not resolve a pointer chain to an address either. That needs the live target, which is Pointer Lab’s job.

Cheat Engine tables carry more than an address list. convert takes the address list and its pointer chains. It does not convert auto-assembler scripts, hotkey bindings or Lua, and it says so for each entry.

The binary is unsigned. Antivirus software or SmartScreen may warn on first run. Build it from source if you would rather not take a binary on trust.