Форум: "WinAPI";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизКак найти адрес нужный памяти в чужом приложении? Найти похожие ветки
← →
Destroyer © (2004-09-11 00:45) [0]Подскажите пожалуйста как найти адрес памяти в чужом приложении, например по какому-то значению. Например нужно найти адрес по которому находится значение "31 32 32 34h"
← →
yozh_programmer © (2004-09-11 12:45) [1]Только перебором адресного пространства! Только не все адреса надо перебирать. Посмотри функцию VirtualQueryEx, некоторые секции адресного пространства нет смысла просматривать.
← →
Destroyer © (2004-09-12 01:20) [2]Спасибо, посмотрю.
← →
Destroyer © (2004-09-12 19:26) [3]Вопросы по ф-ии VirtualQueryEx :
1)Как узнать номер нужного мне процесса?
2)Как получить " address of region " с помощью ф-ии GetSystemInfo?
3)Какой указывать адрес буфера "address of information buffer "и что это за буфер?
← →
Digitman © (2004-09-13 09:09) [4]
> 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, это и есть "буфер", подготовленный для возврата инф-ции об очередном регионе
← →
Суслик © (2004-09-13 14:46) [5]
> [3] Destroyer © (12.09.04 19:26)
В Рихтере (программирование для windows) хорошо описан пример перебора виртуального адресного пространства.
Рихтер есть в электронном виде. Ищи.
← →
Суслик © (2004-09-13 14:48) [6]
> [5] Суслик © (13.09.04 14:46)
я имел в виду вот эту книгу http://www.books.ru/shop/books/8283
← →
yozh_programmer © (2004-09-14 08:54) [7]Только учтите, что переберать надо не все адреса. Например в NT системах перебирать надо в интервале 64kb..(2GB-64kb) (кажись так было), а в Win9х надо с 2GB..4GB
← →
Digitman © (2004-09-14 09:14) [8]
> yozh_programmer © (14.09.04 08:54) [7]
> учтите, что переберать надо не все адреса
чтой-то вдруг ?
ВАП Win32-процесса - это всегда диапазон адресов от 0 до 4Гб
ничто не мешает получить инф-цию о любом регионе в пределах всего ВАП
и то что тот или иной диапазон адресов ВАП в той или иной системе "зарезервирован для системных нужд", вовсе не означает, что инф-цию о регионах в этом диапазоне нельзя получить
← →
Yozh_Programmer © (2004-09-14 10:45) [9]Сорри, я спутал с другой проблемкой!!!
Когда адрес необходимо еше и менять!
← →
Digitman © (2004-09-14 11:23) [10]
> Yozh_Programmer © (14.09.04 10:45) [9]
ну и меняй на здоровье !
только перед этим выставь соотв.атрибуты страниц, образующих регион
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c