Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить список всех переменных чужой програмы?


Страницы:   1 2 3

Miralex ©   (2003-08-27 14:00:00) 

У меня такая проблема:
хендл програмы я нашел а как найти область памяти, где ета программа хранит свои переменные?
Как получить список етих переменных и их значения?
И как работать с ними?


Digitman   (2003-08-29 11:12:00) [21]


> Тутошний Начальник


эк загнул !)


Тутошний Начальник   (2003-08-29 11:09:00) [22]


> nSize количество копируемых байтиков
> lpNumberOfBytesRead - не понял для чего!


параметром nSize ты указываешь, сколько байт начиная с адреса lpBaseAddress ты желал бы прочитать

параметром lpNumberOfBytesRead ты указываешь системе адрес переменной типа Integer в своейпрограмме, куда ф-ция ReadProcessMemory() в ходе своей работы вернет число байт, реально прочитанныхначиная с указанного тобой адреса

т.е . по разным причинам реально прочитанное число байт будет меньше или равно тому числу байт, которое ты запрашиваешь параметром nSize


> lpBaseAddress - откуда он береться?


берется он из результата работы вызываемой передэтим ф-ции VirtualQueryEx().


> как узнать начальный адресс где программа хранит данные?
> и как узнать ее конечный адресс?


опять же - см. ф-цию VirtualQueryEx(). Она вернет параметры региона, в диапазон которого входит переданный ей параметром адрес : базовый адрес региона, размер региона, число страниц в регионе, статус региона и пр.

получая эти результаты циклическим вызовом VirtualQueryEx() (первый вызов - с параметром lpAddress = nil, тот же параметр для последующих вызовов ф-ции зависит от результата предыдущих, т.е. вычисляемый на базе ранее полученного адреса, размера и статуса региона) , ты как раз и имеешь базовый адрес и размер области памяти, отведенный под регион. То что имеешь, как раз и передаешь следом в ф-цию ReadProcessMemory() параметрами.

каждый следующий запрашиваемый в цикле регион имеет баз.адрес, равный баз.адресу предыд. региона + размер предыд.региона


> lpBuffer - как с ним работать?


у себя в приложении следует выделить память, размер которой больше или равен размеру того региона, который собираешься считывать. Указатель на этот блок памяти ты передаешь параметром lpBuffer. В эту память ф-ция ReadProcessMemory() скопирует содержание региона, который ты задаешь параметрами баз.адрес + размер


Miralex   (2003-08-29 10:45:00) [23]

Вот по функции ReadProcessMemory() у меня и есть пару вопросов:

ReadProcessMemory(hProcess,lpBaseAddress,lpBuffer,nSize,lpNumberOfByte sRead);

Значит начинаем подробно:
hProcess - хендл
lpBaseAddress - начальный адресс
lpBuffer - буфер куда будем загонять данные!
nSize количество копируемых байтиков
lpNumberOfBytesRead - не понял для чего!

А теперь вопросы:
lpBaseAddress - откуда он береться? как узнать начальный адресс где программа хранит данные? и как узнать ее конечный адресс?
lpBuffer - как с ним работать?
lpNumberOfBytesRead - что ето такое?

Мне надо будет копировать все данные и обрабатывать!
Как их правильно копировать в буфер? все сразу или по кускам размером например в 2 байта?


Digitman   (2003-08-28 16:05:00) [24]


> Но так и не понял


значит ты не понял, что делает ReadProcessMemory()
она - ключевая среди прочих указанных.
вникни в назначение этой ф-ции ! она скопирует из чужого ВАП в твое ВАП любой доступный участок памяти чужого процесса, после чего в копии можно любым удобным способом искать все что тебе вздумается и как вздумается


Miralex   (2003-08-28 15:48:00) [25]

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

Если кто может напишите мне кусок кода где бы по хендлу находились в памяти и грузились во "что-то" данные нужной программы!


Digitman   (2003-08-28 14:38:00) [26]


> Miralex


> Если честно - ничего не понял


что конкретно не понял ? ты разбирался вообще с назначением упомянутых ф-ций и назначением их параметров/результатов ?


> Обьясните пожалуйста поподробнее


Задавай предметный вопрос - объясним.


> кинуть готовый код чтоб я разобрался


в чем конкретно ? в последовательности вызовов тех или иных ф-ций ? а смысл ? если тебе в принципе не понятно пока применение той или иной ? ведь лавину вопросов вызовет любой такой "пример" !


Jeer   (2003-08-28 14:34:00) [27]

Мда..
Готовое бывает только у мамми на кухне.


denny   (2003-08-28 14:03:00) [28]

Вобще судя по всему ты очен зеленый новичек (не обижайся но это видно по рассуждению о переменных и их способам хранения), а эта задача очень сложная даже для хорошего профи!!! Так что не думаю, что если АртМани не справляется то код написанный табой справится.
Не трать время на собственный код, лучше попробуй с другого "входа". Поищи готовые программы. Но это лучше делать в других форумах


Miralex   (2003-08-28 10:06:00) [29]

Если честно - ничего не понял!
Обьясните пожалуйста поподробнее!
Ктото может кинуть готовый код чтоб я разобрался?


Digitman   (2003-08-27 16:35:00) [30]

перебирай регионы циклическими вызовами VirtualQueryEx(), считывай существующие регионы вызовами ReadProcessMemory() и сканируй прочитанную копию в своем адресном пр-ве как тебе уже вздумается


Miralex   (2003-08-27 16:11:00) [31]


> Digitman


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

Есть какойто готовый модуль типа как в АртМоней?


Digitman   (2003-08-27 15:58:00) [32]


> Я наскока понял


неправильно ты понял)

к тому же откуда ты знаешь, как, в каком порядке и в каких модулях программист, разрабатывавший "чужое" приложение, объявлял "переменные" ? и в какую секцию поместил линкер ее ? и поместил ли вообще ?

ко всему прочему, почему бы искомой "переменной" не быть локальной ? это же тоже "переменная" ! А время жизни лок.переменной равно времени жизни подпрограммы, ее использующей

а если адрес искомой переменной лежит в другой переменной указательного типа ? память-то под первую вполне может выделяться и динамически !

в общем так - раз ты кроме слова "переменная" видеть и знать ничего не желаешь, разбирайся сам и пляши от OpenProcess(), VirtualQueryEx(), VirtualProtectEx(), AdustTokenPrivelegies(), ReadProcessMemory(), WriteProcessMemory()


Anatoly Podgoretsky   (2003-08-27 15:46:00) [33]

Этот список хранится отдельно от программы в мап файле, если конечно он есть.


Miralex   (2003-08-27 15:37:00) [34]


> > Digitman
>
>
> предположим, ты получил список из десятка тысяч адресов
> в чужом ВАП, по которым на момент поиска обнаружены, к примеру,
> искомые 4-байтовые значения


Вот как етот список получить? зная тока хендл программы!


Miralex   (2003-08-27 15:32:00) [35]


> > програма хранит переменные в определеном порядке в области
>
> > памяти, которая выделяет ей винда
>
>
> вот здесь поподробней ...


Я наскока понял что когда ты обьявляешь переменные , то они в том же порядке фиксируються в памяти, когда выполняеться программа!
Если программа одна и таже, то один раз можно найти ету переменую и потом знать где она будет уже лежать!


> > далее отслеживать их изменение
>
>
> как ты себе это видишь ? по таймеру что ли ?

Также как и в Artmoney


HolACost!   (2003-08-27 15:29:00) [36]

Mission Impossible III or Terminator and Programmer!


Digitman   (2003-08-27 15:03:00) [37]


> програма хранит переменные в определеном порядке в области
> памяти, которая выделяет ей винда


вот здесь поподробней ...

что за "определенный порядок" ?
каким образом "выделяет ей винда" ?


> далее отслеживать их изменение


как ты себе это видишь ? по таймеру что ли ?


Miralex   (2003-08-27 14:59:00) [38]


> Digitman


я знаю что програма хранит переменные в определеном порядке в области памяти, которая выделяет ей винда!
Мне надо найти ету область памяти и просканировать и найти там свои переменные!
и далее отслеживать их изменение!....
а как найти саму область ету?
и как с ней работать?


Digitman   (2003-08-27 14:53:00) [39]


> Digitman


предположим, ты получил список из десятка тысяч адресов в чужом ВАП, по которым на момент поиска обнаружены, к примеру, искомые 4-байтовые значения ... дальше что ?


Miralex   (2003-08-27 14:46:00) [40]


> HolACost!


а как найти етот адресс процесса?
Я так понял надо найти область в памяти которую занимает етот процесс!
а как ето сделать?
как найти где начинаються возможные его данные, где заканчиваються?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо