Низкоуровневое программирование: как найти данные в памяти другого запущенного процесса? - PullRequest
3 голосов
/ 24 марта 2009

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

Пока я просто вручную ищу игровую память, используя редактор памяти (ArtMoney), и ищу адреса, которые меняют свои значения по мере изменения данных (или не меняются). После того как адрес найден, я ищу указатель, который аналогичным образом указывает на этот блок памяти.

Интересно, какие методы / инструменты существуют для таких задач? Может быть, есть какие-то статьи, которые я могу прочитать? Является ли освоение дизассемблера единственным способом? Например, игровые тренажеры решают похожие задачи, но делают их за несколько дней, а я борюсь уже несколько недель.

Спасибо.

PS. Это все под окнами.

Ответы [ 3 ]

1 голос
/ 25 марта 2009

Является ли освоение дизассемблера единственным способом?

Да; скачайте WinDbg с http://www.microsoft.com/whdc/devtools/debugging/default.mspx, или, если у вас есть деньги, IDA Pro, вероятно, лучший инструмент для этого

0 голосов
/ 25 марта 2009

Вы можете взглянуть на DynInst (Dynamic Instrumentation). В частности, посмотрите на Динамическую библиотеку классов датчиков (DPCL) . Эти инструменты позволят вам подключаться к запущенным процессам через интерфейс отладчика и вставлять в них ваши собственные инструменты (через специальные классы пробников) во время их работы. Вы, вероятно, могли бы использовать это для инструктажа подпрограмм, которые обращаются к вашим структурам данных и отслеживают, когда значения, в которых вы заинтересованы, созданы или изменены.

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

Я считаю, что поддержка Windows поддерживается, но я сам ею не пользовался.

0 голосов
/ 25 марта 2009

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

...