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

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

ReadProcessMemory.... Помогите разобраться!!! [D5, Win2k]


Страницы:   1 2

Alex_mai ©   (2002-12-05 13:34:00) 

Уважаемые мастера!!! У меня возникла проблема - Запускаю программу с помощью CreateProcess. Подскажите, пожалуйста, как по хендлу процесса или по его ID узнать начальный адрес памяти, где находится его код и данные... Сразу оговорюсь, что это производственная необходимость, а не вирусописание


Ketmar   (2002-12-05 19:18:00) [21]

код в судию.

Satanas Nobiscum! 05-Dec-XXXVII A.S.


Cobalt   (2002-12-05 18:58:00) [22]

попробуйте внедриться в АП


Alex_mai   (2002-12-05 18:32:00) [23]

Игорь, совсем не трудно. Шеф принёс программу для редактирования бинарных файлов (прошивок), но беда в том, что в ней отсутствует функция сохранения. Попросил меня разобраться... Сами понимаете, что исходников под неё у меня нет, но я заметил, используя программу ART_MONEY, что загружаемый бинарник хранится в одном месте целиком. Программа даже адрес выдаёт - 00485058!
Пытаюсь читать из памяти:
ReadProcessMemory(hdl,pointer($485058),@buf,1,i)
-значения совершенно другие.

paul_shmakov, спасибо за ответ, но поскольку я не мастер в программировании, а дремучий новичок, то кроме "MZ" я ничего не понял. Извини.


paul_shmakov   (2002-12-05 14:00:00) [24]

только нужно в следующей последовательности считывать:
1) IMAGE_DOS_HEADER, проверить, что поле e_magic равно $4D5A (MZ)
2) по смещению IMAGE_DOS_HEADER.e_lfanew считать IMAGE_NT_HEADER, проверить, что поле Signature равно $50450000 (PE).

а дальше уже из IMAGE_NT_HEADER взять OptionalHeader.ImageBase - вот и результат. т.е. виртуальный адрес, по которому будет загружаться модуль (exe! dll может и по другому адресу загрузиться).

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

поэтому изложите проблему более конкретно.


Игорь Шевченко   (2002-12-05 13:56:00) [25]

А можно вопрос, что за производственная необходимость ? Очень мне интересно, ответьте, если не трудно...


paul_shmakov   (2002-12-05 13:41:00) [26]

все достаточно просто - все данные, которые вам нужны, находятся в PE-заголовке, которые можно считать из exe-файла.
смотрите структуру IMAGE_OPTIONAL_HEADER и поле в ней ImageBase.


Страницы:   1 2

Наверх

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