Scanning options - AngryCarrot789/MemoryEngine360 GitHub Wiki

This pages describes all of the options for scanning.

Data Type

This specifies what type of data you're looking to search for:

  • Byte (aka Int8)
  • Int16 (aka short)
  • Int32 (aka int)
  • Int64 (aka long)
  • Float (single precision, 32 bit floating point number)
  • Double (double precision, 64 bit floating point number)
  • String
  • ByteArray

For integer types, the search query(ies) can be optionally parsed as hexadecimal.

Strings can be decoded in a specific encoding (e.g. UTF16), however, most strings are probably ASCII which is why it's the default. You can also toggle Ignore Cases to completely ignore capitalization of characters.

ByteArray is the byte/pattern scanning option (wildcard chars are completely optional!). You enter the bytes to search for in hexadecimal, and for wildcards, just type a single question mark. Each byte/wildcard token is separated by a whitespace. For example: 04 C6 ? CA FE ? ? 02

Compare Mode

Integer and Float types can be compared in a specific way:

  • Equals
  • Not Equals
  • Less Than
  • Less Than Or Equals
  • Greater Than
  • Greater Than Or Equals
  • Between (shows two search query fields instead of 1)
  • NotBetween (shows two search query fields instead of 1)

Comparison Order

The console's value is the left comparand, and the search query is the right. Say you're searching for 23, and the engine read a value of 254, and the scan type is LessThan, the final comparison 254 < 23, which equates to false, meaning no scan result is created for 254.

If the scan type is Between, and your Min/Max query is 40 to 70, and the scanning engine has read a value of 55, the final comparison is 55 >= 40 && 55 <= 70, which equates to true, so you'll get a scan result.

Float Truncation

Floats have post-processing after being read from the console.

  • Truncating to query means removing decimal places up to the amount present in the query. So if you search for 23.456 and the value read from the console is 23.456924, the console's value gets truncated to 23.456.
  • Round to query is the same, except the last decimal number gets rounded (specifically rounded towards even, so 0.5 becomes 1.0, 0.4 becomes 0.0), so the value would end up as 23.457

More may be added in the future, with extra customisations.

"Any" (unknown data type)

This search mode lets you search for all data types at once. The "Unknown" tab allows you to change the order that integers are searched, while float/double/string are fixed. Any data type can be enabled/disabled, if you wish to do so

First/Previous Value

For numeric data types, you can toggle the First or Prev buttons on the right side of the search query. These toggle whether to use the First or Previous value (respectfully) as the actual search query.

Say you have some results and you've done a few next scans. Say the First value is 25, Previous value is 450, Current value is 234. Enabling First compares 234 to 25. So if Scan Type was LessThan, the comparison would be 234 < 25, which equates to false, so the scan result gets removed.

Additional Options (Memory Scanning Options)

This panel contains the Start/Length fields, as well as alignment, DEBUG PAUSE and scan memory pages.

  • Start is the starting address of the scan
  • Length is the amount of bytes to read.
  • Align specifies the value to offset the current address being processed for each iteration. Code probably explains it better: for (addr = start; addr < (start + length); addr += align) // process value at addr
  • DEBUG PAUSE toggles if the console is frozen during scanning. Freezing the console massively speeds up scan speeds, especially when playing a game.
  • Scan Memory Pages toggles whether to process memory sections that are within the scan range. This can speed up scans if, for example, no actual memory is allocated for 50% of your scan range.

Note, if the console is already frozen when DEBUG PAUSE is enabled, it will become unfrozen after the scan finishes. Disable DEBUG PAUSE to stop this

First Scan, Next Scan, Reset

First scan processes the entire scan range (or all memory sections intersecting it, if Scan Memory Pages is ticked) and searches for values that match your search query(ies).

Next Scan reads the values from all of your scan results and compares it to the search query (or the first/prev value if you have those toggled), and removes any that no longer match.

Reset clears all scan results, allowing you to perform the first scan again.