Каков базовый / статический адрес для переменных в программе?

0

Я занимаюсь некоторыми исследованиями по взлому, и я наткнулся на некоторые уроки Cheat Engine для взлома памяти. Если бы мы захотели найти адрес памяти переменной, нам пришлось бы сканировать память процесса с помощью Cheat Engine, чтобы найти адрес. Однако, поскольку эти адреса динамичны, каждый раз, когда запускается новый процесс этой игры, адрес будет меняться.

Поэтому в учебнике были введены статические адреса, которые не меняются для каждого экземпляра игры. И чтобы найти этот адрес, нам пришлось повторно сканировать "для доступа к этому адресу", используя регистр из строки сборки из предыдущего сканирования, чтобы найти следующий. Сборка будет в форме

opcode [esi + offset]

Итак, в конце концов, мы получаем адрес и смещение, которое является базовым адресом.

Но как это работает?

Кроме того, я не совсем понимаю понятие базового адреса. Это какой-то относительный адрес, где программа загружается в память? Таким образом, это не изменится, когда мы снова загрузим программу?

  • 0
    Я хочу убедиться, что я понимаю: вы спрашиваете, как работает "какой-то чит-движок"?
  • 0
    Больше о том, как работают базовые указатели
Теги:
pointers
memory
memory-management
stack

1 ответ

1

Вероятно, переменная хранится в классе, который динамически выделяется во время выполнения, поэтому переменный адрес изменяется при каждом прогоне. Будучи динамически распределенным, что-то должно ссылаться на этот адрес, и именно там статические адреса начинают входить в игру. В вашем примере ESI, скорее всего, был назначен адрес базовой памяти выделенного класса, например, с оператором mov esi, [somevar] (где somevar - переменная указателя, которая содержит выделенный адрес), а offset - это смещение байта целевой переменной внутри класса. Поэтому сначала найдите somevar а затем вы можете перейти к целевой переменной.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню