Skip to content

Scanning

brkzlr edited this page Jun 18, 2026 · 4 revisions

Scanning

The scan interface is where you find memory addresses by searching for specific values. PINCE uses a filter-based approach like CE: you start with a broad search, then narrow it down by performing additional scans as the value changes in the game.

Scan Workflow

Memory scanning works in two phases:

  • New Scan (First Scan): Click First Scan to start fresh. This searches the entire memory space (or your selected scan scope) for values matching your criteria. The first scan will return thousands or millions of results.
  • Ongoing Scan (Next Scan): After the first scan, click Next Scan to scan for the new value you inputted (or left the old one). Now you can filter the previous results based on how the value has changed. Each ongoing scan narrows down the results until you've isolated the addresses you want.

Clicking New Scan after First Scan will reset your scan session and start anew.

Value Types

The Value Type dropdown determines what kind of data you're searching for:

  • Int(any): Searches for any integer size (8, 16, 32 or 64 bit). Useful when you don't know the exact size.
  • Int8, Int16, Int32, Int64: Searches for specific integer sizes. Int32 is the most common for modern games.
  • Float(any): Searches for any floating point size (32 or 64 bit).
  • Float32, Float64: Searches for specific float sizes. Float32 is most common.
  • String: Searches for text strings.
  • ByteArray: Searches for raw byte patterns (array of bytes).

Scan Types

The Scan Type dropdown determines how PINCE compares values. Available options depend on whether you're doing a new scan or an ongoing scan:

  • For New Scans:
    • Exact: Finds values exactly equal to what you entered.
    • Not: Finds values not equal to what you entered.
    • Less than: Finds values less than what you entered.
    • More than: Finds values more than what you entered.
    • Between: Finds values between two numbers (use both input fields).
    • Unknown value: Finds all values (useful for starting a scan when you don't know the exact value).
  • For Ongoing Scans:
    • Exact: Finds values that now equal what you entered.
    • Not: Finds values that now differ from what you entered.
    • Increased: Finds values that have gone up since the last scan.
    • Increased by: Finds values that have gone up by a specific amount.
    • Decreased: Finds values that have gone down since the last scan.
    • Decreased by: Finds values that have gone down by a specific amount.
    • Less than: Finds values less than what you entered.
    • More than: Finds values more than what you entered.
    • Between: Finds values between two numbers.
    • Changed: Finds values that have changed (any direction).
    • Unchanged: Finds values that haven't changed.

Scan Scope

The Scan Scope dropdown controls which memory regions PINCE searches:

  • Basic: Searches heap, stack and executable memory. Fastest option, works for some games.
  • Normal: Searches heap, stack, executable memory and BSS (uninitialized data). Good balance of speed and coverage, works for most games.
  • RW: Searches all read-write memory regions. Slower but catches more values.
  • Full: Searches all memory regions including read-only. Slowest but most thorough.

My recommendation is to start with the default Normal. If you can't find what you're looking for, try RW. Full is not really recommended for normal variables unless you're trying to search for AOB (Array of Bytes/Bytearray) values.

Endianness

The Endianness dropdown controls byte order for multi-byte values:

  • Host: Uses your system's native byte order (usually little endian on x86/x64).
  • Little: Forces little endian byte order (most common for x86/x64 games).
  • Big: Forces big endian byte order (used by some console games, emulators or network protocols).

Most of the time you'll use Host. Only change this if you're searching for values from a different architecture.

Alignment

The Alignment dropdown controls memory alignment filtering:

  • Auto: Automatically determines alignment based on value type.
  • 1, 2, 4, 8, 16: Only searches addresses that are multiples of the selected alignment.

Using alignment can speed up scans significantly. For example, 4-byte integers are usually aligned to 4-byte boundaries, so you can skip addresses that aren't multiples of 4.

Hex Checkbox

The Hex checkbox toggles hexadecimal input mode for integer scans. When checked, you can enter values in hex format (like FF instead of 255). Useful when working with raw memory values or byte patterns.

Value Input Fields

You have two input fields for entering search values:

  • First field: The primary value to search for.
  • Second field: Used for "Between" scans to specify the range.

For most scan types you only need the first field. The second field is only used when you select "Between" as the scan type.

Manage Scan Regions

The Manage Scan Regions button opens a dialog showing all memory regions that will be scanned. You can uncheck regions to exclude them from your scan. This is useful for:

  • Speeding up scans by excluding irrelevant regions
  • Avoiding false positives from memory-mapped files
  • Focusing on specific modules or libraries

The dialog shows each region's ID, start address, size, type, load address, permissions and associated file. Check the boxes next to regions you want to exclude, then click OK.

Search Results Table

After a scan, the results appear in a table with three columns:

  • Address: The memory address where the value was found.
  • Value: The current value at that address.
  • Previous: The value from the previous scan (useful for tracking changes).

Double-click any result to add it to the address table. You can also right click for a context menu:

  • Copy Address (Ctrl+C): Copies the selected address(es) to clipboard.
  • Browse Memory Region (Ctrl+B): Opens the Memory Viewer's hex dump at this address.
  • Disassemble Address (Ctrl+D): Opens the Memory Viewer's disassembly at this address.
  • Delete Selection (Del): Removes the selected results from the table.

Typical Scan Workflow

Here's a common workflow for finding a value like health:

  1. Start with First Scan, set Value Type to Int32, Scan Type to Exact (should be the defaults already).
  2. Enter the current health value (e.g. 100) and click First Scan
  3. You'll get thousands/millions/billions (depending on game size) of results
  4. In the game, let your health change (e.g. take damage to go to 95)
  5. Enter the new value (95) and click Next Scan
  6. Results narrow down significantly
  7. Repeat steps 4-5 until you have a manageable number of results (ideally less than 20)
  8. Double click promising addresses to add them to the address table
  9. Test each one by modifying the value or freezing it

For values you can't see (like hidden stats), use Unknown value for the first scan, then use Increased/Decreased/Changed/Unchanged for ongoing scans as you observe the game behaviour.

Clone this wiki locally