-
Notifications
You must be signed in to change notification settings - Fork 186
Address Table and Sessions
The address table is where you keep track of all the memory addresses you've found during your search. Every important value, pointer or piece of code you discover gets added here so you can monitor and modify it in real time.
Sessions let you save your entire address table along with bookmarks and notes to a file, so you can pick up where you left off later.
The address table has five columns:
- Frozen: A checkbox that lets you freeze the value at this address. When checked, PINCE continuously writes the value back to memory, preventing the game from changing it.
- Description: Your own label for this entry, like "Health" or "Ammo Count". Helps you remember what each address does.
-
Address: The memory address or pointer chain. This can be a static address like
0x00456789or a pointer chain like[[base+123]+45]. - Type: The data type of the value at this address. Determines how PINCE reads and writes the memory.
- Value: The current value at this address. Updates in real time as the program runs. You can double click to edit it.
When you add an entry to the address table, you need to specify what type of data it holds:
- Int8, Int16, Int32, Int64: Integer values of different sizes (1, 2, 4 or 8 bytes). Use these for whole numbers like health, ammo or score. Can be displayed as signed, unsigned or hexadecimal.
- Float32, Float64: Floating point numbers (4 or 8 bytes). Use these for decimal values like position coordinates, speed or percentages.
- String (ASCII, UTF8, UTF16, UTF32): Text values. Different encodings for different games. ASCII is the most common for older games, UTF8 for modern ones, UTF16/UTF32 for games with international text.
- ByteArray (AOB): Array of bytes. Use this for raw binary data, custom structures or when you don't know the exact type.
- Struct: A custom data structure you've defined. Lets you view multiple related values at once, like all the fields of a player object.
Freezing is one of the most powerful features of the address table. When you check the Frozen checkbox, PINCE continuously writes the current value back to memory, preventing the game from changing it. This is how you make infinite health, unlimited ammo or god mode.
This comes with a small caveat as the way this feature works is by constantly writing the current value to the variable's address, which means that if your variable is changing faster than we can write, you might still get some unintended behaviour.
One example is taking damage higher than your current health in one go and the game checking your health before we could write it back in time, which will cause you to die.
You can change the freeze writing interval by going to Settings -> General and changing the Freeze Interval value which by default is set to 100ms (write value every 100 ms).
Clicking on the small (near invisible) box to the right of the Freeze box while Freeze is active will cycle between different types of freeze.
The first type will be with a green up arrow and check mark, which means the variable is allowed to increase in value but not decrease at all. One good use case for this is money variables, you want your money to increase but never decrease, allowing infinite purchases.
The second type will be with a red down arrow and check mark, which means the variable is allowed to decrease in value but not increase at all. One good use case for this is if you have a resource that's bad the more it increases so you want it to either stay at the same value or decrease.
Of course you could also just set your variable to a good value and use the normal Freeze to stay there but it's good to know you also have options for different freezing behaviours.
Script entries are special rows in the address table that run custom code when you toggle them on or off. Instead of freezing a memory address, they execute Python code to perform complex actions like modifying multiple values at once, calling game functions or injecting custom logic.
To create a script entry, use the Libpince Engine to write your code, then send it to the address table. The script can have [ENABLE] and [DISABLE] sections that run when you check or uncheck the box.
You can organize your address table entries into collapsible groups to keep things tidy. This is especially useful when you have dozens or hundreds of entries. Right click on selected entries and choose Add Group to create a new group and move the entries into it. Groups can be expanded or collapsed by clicking the arrow next to them.
Right clicking on an entry in the address table gives you access to many operations:
-
Edit Submenu:
- Description (Ctrl+Enter): Changes the label for this entry.
- Address (Ctrl+Alt+Enter): Changes the memory address or pointer chain.
- Type (Alt+Enter): Changes the data type.
- Value (Enter): Changes the current value.
- Edit Script: Opens the Libpince Engine to edit the script code for a script entry.
- View as Struct: Opens a structure view overlaying this address. Lets you see multiple related values at once using a structure definition you've created.
- Show Hex/Dec/Unsigned/Signed: Changes how integer values are displayed. Hex shows the value in hexadecimal, Dec/Unsigned shows it as an unsigned decimal, Signed shows it as a signed decimal.
- Toggle (Space): Checks or unchecks the Frozen checkbox for this entry.
- Toggle Children (Ctrl+Space): Checks or unchecks the Frozen checkbox for all child entries under a group.
- Browse Memory Region (Ctrl+B): Opens the Memory Viewer's hex dump pane at this address.
- Disassemble Address (Ctrl+D): Opens the Memory Viewer's disassembly pane at this address.
- Pointer Scanner: Opens the pointer scanner to find pointer chains to this address.
- Pointer Scan: Performs a pointer scan starting from this address.
- What Writes/Reads/Accesses: Sets a watchpoint on this address to find what code modifies it. What Writes finds code that writes to this address, What Reads finds code that reads from it, What Accesses finds both.
- Cut/Copy/Paste: Cuts, copies or pastes entries in the address table. Paste Inside (V) pastes entries as children of the selected group.
- Add Group: Creates a new group and moves selected entries into it.
- Create Group: Creates a new empty group at the end of the address table.
Sessions let you save your entire workspace to a file so you can pick up where you left off later. A session includes:
- All entries in the address table (including their freeze states and values)
- All bookmarks with their comments
- Notes you've written
- Custom structure definitions
- The process name
Saving a Session: Click the Save button in the main window or press Ctrl+S. You'll be prompted to choose a file location. Sessions are saved with the .pct extension.
Loading a Session: Click the Open button in the main window or press Ctrl+O. Select a .pct file to load. If you have unsaved changes, PINCE will ask if you want to save them before loading the new session.
What Gets Saved: Everything you see in the address table gets saved, including:
- Entry descriptions, addresses, types and values
- Freeze states and freeze modes
- Group hierarchy and collapsed/expanded states
- Script entries and their code
- Pointer chains
Bookmarks, notes and custom structures are also saved, so your entire workflow is preserved.
Session Versions: Sessions have a version number that increases when new features are added. Old sessions are automatically migrated to the latest version when you load them, so you can still open sessions from older versions of PINCE.