Skip to content

Storing All Values

Zorg edited this page Nov 19, 2022 · 6 revisions

Storing Values

A user can store a snapshot of a program's memory at any given time, and can make searches that compare against those values. The difference between this and a normal search is that instead of explicitly telling what value to search for, the values in memory currently are being compared against the values at the last snapshot taken.

Example Procedures

  1. My player's health bar is at full health. I take a snapshot by storing all values - this can be done by hitting the Store Values button next to the search field. Initially the button looks like an empty bucket waiting to be filled with value. Once it's clicked, a variable $StoredValue shows up in the search field.
  2. I decrease my health by injuring myself. I search for all values that are less than the stored values (where I was at full health)
  3. I heal myself to full health with a health pack. I search for all values that are equal to the stored values (where I was at full health)
  4. Rinse and Repeat.

Searching this way is useful when one can predict how a value changes, but does not know the exact value.

Because one may want to store all values frequently, it is made available in the Variable menu as a shortcut. Shortcuts also exist for going to the Next/Previous Operator in the View menu.

In Bit Slicer 1.7.12 and later, an option to automatically Store Values after every search is completed is available in the Variable menu. Alternatively, this option can be toggled on by clicking the Store Values button with the Option key held down. The button will show a recording symbol. An example procedure using this option may be:

  1. My player's health bar is at full health. I take a snapshot by storing all values by hitting the Store Values button with Option held down to also activate storing values after every subsequent search.
  2. I decrease my health by injuring myself. I search for all values that are less than the stored values (where I was at full health). Also, Bit Slicer automatically takes a snapshot that stored all values again.
  3. I decrease my health even further down by injuring myself again and search for all values that are less than the stored values since my previous search (where my health was a bit higher but not full). Bit Slicer automatically takes a snapshot that stored all values again.
  4. Rinse and Repeat.

Linear Expressions

When performing a search that compares against stored values, the type of expressions that are supported are linear expressions:

multiplier * $StoredValue + additive

Note that the $StoredValue variable name can be named as anything, as long as it follows after a $. When the multiplier and additive values are left out, they are implicitly 1 and 0 respectively. Bit Slicer will even try to transform complex expressions into this form.

Here are some examples:

  • $StoredValue
  • $StoredValue + 1
  • 2 * $StoredValue + 1
  • $StoredValue / 2 - 1
  • ($StoredValue + 2) * (8 + 0x100)