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

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

Доступ к памяти процесса [D5, D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]


DeadMeat ©   (2003-05-11 21:55:00) 

Может быть я всех достану этим вопросом (в смысле может его ещё кто задавал...), но мне надо узнать (а точнее узнать у вас), как получить доступ типа Read/Write к области памяти, занимаемой моим процессом... Заранее спасибо...


DeadMeat   (2003-05-13 17:58:00) [1]

Большое спасибо всем кто откликнулся...

> AlexRush
Не знаю почему, но этот метод у меня срабатывает только тогда, когда я прогу запускаю из Delphi, а в отдельном *.EXE-шнике срабатывает только метод NightAngel, но с небольшими переработками...

Ещё раз спасибо...


AlexRush   (2003-05-13 11:05:00) [2]

В заголовке PE модуля находится таблица секций - массив структур
IMAGE_SECTION_HEADER. В поле Characteristics нужной структуры устанавливаем бит 31:

var ish:IMAGE_SECTION_HEADER;
ish.Characteristics
:= ish.Characteristics OR IMAGE_SCN_MEM_WRITE;
Любая секция становится доступной для записи. Сам делал - работает.


NightAngel   (2003-05-13 02:38:00) [3]

> DeadMeat © (12.05.03 14:11)

VirtualProtect(GetModuleHandle(0),Размер файла,...)


VMcL   (2003-05-12 14:43:00) [4]

IMHO, image base, указанный на закладке Linker в свойствах проекта (хранится в PE заголовке), но по-моему он может изменяться системой (с соответствующим изменением всех JMP, CALL и т. п.).


DeadMeat   (2003-05-12 14:11:00) [5]

Вообще, мне надо изменить данные в области именно исполняемого кода, а не системных библиотек. Причём не вовремя работы этой области, а до этого момента... Про VirtualProtect я почитал, и честно говоря, меня в тупик поставило лишь одно: как узнать адрес, с которого начинается исполняемый код, и размер этой области...


NightAngel   (2003-05-12 03:10:00) [6]

>Надо ещё постараться, чтобы найти в памяти своей же программы область с аттрибутом PAGE_READONLY
И стараться не надо. Страницы с исполняемым кодом Вашего процесса. Насчёт системных библиотек, то это только в Win9x, т.к. только в этих системах память, начиная с 2Gb, спроецирована на все контексты, присутствующие в системе и недоступна для модификации.


Morfein   (2003-05-12 02:40:00) [7]

Надо ещё постараться, чтобы найти в памяти своей же программы область с аттрибутом PAGE_READONLY (про область выше 0x7fffffff я не говорю - если человек хочет переписать память сист. билиотек, то в Win32 ему VirtualProtectEx не поможет)


NightAngel   (2003-05-12 02:30:00) [8]

> Morfein © (12.05.03 01:57)
Всё верно, вот только когда Вы выполните MOV память,регистр, и эта памятьбудет в странице с атрибутом запрещающим Write, вот тут-то Вы и получите по рукам.


Morfein   (2003-05-12 01:57:00) [9]

Существует такой команда процессора MOV...:

MOV регистр, память
MOV память, регистр
MOV регистр, регистр

Пример:
var
x : dword;
begin
asm
mov eax, dword ptr [$00400000]
mov x, eax
end;


А есть ещё оператор ":=" (присваивание)
Пример:
var
x : dword;
p : pointer;
begin
p:=$00400000;
x:=dword(p^);
end;


NightAngel   (2003-05-12 00:45:00) [10]

Если я правильно понял вопрос - VirtualProtect().


Наверх

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