2015-06-06 3 views
0

В старых добрых DOS 5.0 раза я использовал некоторую резидентную программу для поиска (и изменения) расположения памяти программной переменной. Обычно живет, или боеприпасы в играх (да, обман). Он снимал снимок памяти на диск и делал различия. Можно также сузить поиск, используя большее, меньшее сравнение. Затем он смог зафиксировать значение и так далее.Поиск местоположения памяти в запущенном приложении

Если возможно, как я могу сделать что-то подобное в текущей версии Linux (64 бит)? Есть ли такой инструмент? Я пробовал radare2 для отслеживания вызовов, но двоичный файл лишен, и я теряюсь.

Спасибо.

ответ

1

Память процесса Linux может быть рассмотрена и изменена путем сопоставления фрагментов псевдофайла /proc/<PID>/maps. Вы можете узнать, где находятся разные части процесса: чтение /proc/<PID>/maps и другие подобные файлы.

Проблема, с которой вы столкнетесь, заключается в том, что многие вещи изменились со времен старых добрых DOS. В те времена, всего за несколько десятков килобайт для вашей программы, глобальные переменные были нормой, и их легко найти.

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

+0

Вы, вероятно, правы, что сложность растет много для этого простого подхода. Я попытался сбросить память с помощью 'gcore' и сравнить созданные 75 МБ-файлы. Это помогло мне сузить поиск до ~ 1600 байт, что по-прежнему много. –

0

Также команда pmap покажет вам местоположения памяти (начальные точки и размер), используемые процессом.

Например, если бы я имел процесс с идентификатором 123:

pmap 123 
Смежные вопросы