Как следует из названия, я хочу посмотреть, откуда пришло значение конкретного адреса. Я отлаживаю игру для iOS с помощью lldb. В этой игре значение множителя равно 0,4 (насколько быстро уменьшаются комбинации). Я могу изменить это значение с помощью чит-движка, но я хочу знать, какая инструкция в ассемблере устанавливает это значение по этому адресу, чтобы я мог изменить эту инструкцию с помощью шестнадцатеричного редактора. Раньше я использовал точки наблюдения, точки останова и т. д. для переменных значений, но в этом случае значение является постоянным и устанавливается при немедленном запуске приложения.
Как узнать, в каком разделе он находится?
Я предполагаю, что у чит-движка есть инструменты для этого. Я никогда не использовал его, поэтому не могу помочь вам с этим, к сожалению. То же самое касается lldb. Однако, используя gdb, вы можете сделать info symbol
, что даст вам раздел, а затем использовать info files
, чтобы получить базовый адрес этого раздела. Затем вы можете вычесть это из адреса символа, чтобы получить смещение. Наконец, найдите начало раздела в двоичном файле (например, с помощью objdump
или readelf
) и добавьте смещение, рассчитанное на предыдущем шаге. Затем вы должны найти свою переменную в этой позиции в файле.
Эквивалентные инструкции в lldb для шагов Jester gdb:
(lldb) image lookup -va <ADDRESS>
Это расскажет вам все, что lldb знает об этом адресе.
Конечно выглядит проще :D
Когда я ввожу «поиск изображения -ва адрес-значения», я не вывожу.
Это означает, что этот адрес не находится ни в одном из загруженных разделов из списка изображений в вашей программе. Обычно это связано с тем, что адрес находится в выделенной памяти стека или кучи - из вашего описания больше похоже на последнее.
Если это константа, то, вероятно, никакая инструкция не установила ее. Он просто в бинарнике и загружается в память. Найдите, в каком разделе он находится, затем найдите его в файле.