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 is23.456924
, the console's value gets truncated to23.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.