![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как найти адрес нужный памяти в чужом приложении? [D6, WinXP]
Destroyer © (2004-09-11 00:45:00)Подскажите пожалуйста как найти адрес памяти в чужом приложении, например по какому-то значению. Например нужно найти адрес по которому находится значение '31 32 32 34h'
Digitman (2004-09-14 11:23:00) [1]
> Yozh_Programmer © (14.09.04 10:45) [9]
ну и меняй на здоровье !
только перед этим выставь соотв.атрибуты страниц, образующих регион
Yozh_Programmer (2004-09-14 10:45:00) [2]Сорри, я спутал с другой проблемкой!!!
Когда адрес необходимо еше и менять!
Digitman (2004-09-14 09:14:00) [3]
> yozh_programmer © (14.09.04 08:54) [7]
> учтите, что переберать надо не все адреса
чтой-то вдруг ?
ВАП Win32-процесса - это всегда диапазон адресов от 0 до 4Гб
ничто не мешает получить инф-цию о любом регионе в пределах всего ВАП
и то что тот или иной диапазон адресов ВАП в той или иной системе "зарезервирован для системных нужд", вовсе не означает, что инф-цию о регионах в этом диапазоне нельзя получить
yozh_programmer (2004-09-14 08:54:00) [4]Только учтите, что переберать надо не все адреса. Например в NT системах перебирать надо в интервале 64kb..(2GB-64kb) (кажись так было), а в Win9х надо с 2GB..4GB
Суслик (2004-09-13 14:48:00) [5]
> [5] Суслик © (13.09.04 14:46)
я имел в виду вот эту книгу http://www.books.ru/shop/books/8283
Суслик (2004-09-13 14:46:00) [6]
> [3] Destroyer © (12.09.04 19:26)
В Рихтере (программирование для windows) хорошо описан пример перебора виртуального адресного пространства.
Рихтер есть в электронном виде. Ищи.
Digitman (2004-09-13 09:09:00) [7]
> 1)Как узнать номер нужного мне процесса?
у процесса нет "номера" ... у процесса есть глобально уникальный идентификатор PID, который вовсе не требуется для работы ф-ции VirtualQueryEx ... для работы ф-ции VirtualQueryEx требуется хэндлпросесса, который м.б. получен ф-цией OpenProcess() .. вот для OpenProcess и нужен PID ... а PID , в свою очередь, связан с именем исп.файла в отношении "многие-к-одному" (т.е. несколько различных PID могут быть ассоциированы с одним и тем же именем исп.файла в случае, например, работы более чем одного экз-ра процесса с заданным именем исп.файла) ... получить список соответствий PID и ExeName можно ф-циями перечисления процессов в составе модулей tlhelp32 (win9x/Me) и psapi (NT/2000/XP)
> 2)Как получить ' address of region ' с помощью ф-ции GetSystemInfo?
никак
ф-ции эти предназначены для возврата совершенно разной инф-ции
VirtualQueryEx следует вызывать в цикле, начиная с lpAddress = nil и при каждой след.итерации инкрементируя lpAddress на значение RegionSize, возвращенное при предыдущей итерации в структуре MEMORY_BASIC_INFORMATION .. перечисленные в цикле регионы, имеющие State = MEM_FREE и/или Type = MEM_PRIVATE, из рассмотрения на предмет сабжа следует исключать
> 3)Какой указывать адрес буфера 'address of information buffer
> 'и что это за буфер?
просто передать в кач-ве этого параметра имя переменной типа TMemoryBasicInformation, это и есть "буфер", подготовленный для возврата инф-ции об очередном регионе
Destroyer (2004-09-12 19:26:00) [8]Вопросы по ф-ии VirtualQueryEx :
1)Как узнать номер нужного мне процесса?
2)Как получить ' address of region ' с помощью ф-ии GetSystemInfo?
3)Какой указывать адрес буфера 'address of information buffer 'и что это за буфер?
Destroyer (2004-09-12 01:20:00) [9]Спасибо, посмотрю.
yozh_programmer (2004-09-11 12:45:00) [10]Только перебором адресного пространства! Только не все адреса надо перебирать. Посмотри функцию VirtualQueryEx, некоторые секции адресного пространства нет смысла просматривать.