Как я могу отследить значение адреса в памяти?

Как следует из названия, я хочу посмотреть, откуда пришло значение конкретного адреса. Я отлаживаю игру для iOS с помощью lldb. В этой игре значение множителя равно 0,4 (насколько быстро уменьшаются комбинации). Я могу изменить это значение с помощью чит-движка, но я хочу знать, какая инструкция в ассемблере устанавливает это значение по этому адресу, чтобы я мог изменить эту инструкцию с помощью шестнадцатеричного редактора. Раньше я использовал точки наблюдения, точки останова и т. д. для переменных значений, но в этом случае значение является постоянным и устанавливается при немедленном запуске приложения.

Если это константа, то, вероятно, никакая инструкция не установила ее. Он просто в бинарнике и загружается в память. Найдите, в каком разделе он находится, затем найдите его в файле.

Jester 22.05.2019 15:19

Как узнать, в каком разделе он находится?

a. saleh 22.05.2019 16:26

Я предполагаю, что у чит-движка есть инструменты для этого. Я никогда не использовал его, поэтому не могу помочь вам с этим, к сожалению. То же самое касается lldb. Однако, используя gdb, вы можете сделать info symbol, что даст вам раздел, а затем использовать info files, чтобы получить базовый адрес этого раздела. Затем вы можете вычесть это из адреса символа, чтобы получить смещение. Наконец, найдите начало раздела в двоичном файле (например, с помощью objdump или readelf) и добавьте смещение, рассчитанное на предыдущем шаге. Затем вы должны найти свою переменную в этой позиции в файле.

Jester 22.05.2019 16:32
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
3
291
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эквивалентные инструкции в lldb для шагов Jester gdb:

(lldb) image lookup -va <ADDRESS>

Это расскажет вам все, что lldb знает об этом адресе.

Конечно выглядит проще :D

Jester 22.05.2019 20:26

Когда я ввожу «поиск изображения -ва адрес-значения», я не вывожу.

a. saleh 22.05.2019 23:26

Это означает, что этот адрес не находится ни в одном из загруженных разделов из списка изображений в вашей программе. Обычно это связано с тем, что адрес находится в выделенной памяти стека или кучи - из вашего описания больше похоже на последнее.

Jim Ingham 23.05.2019 20:05

Другие вопросы по теме