Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.14;
Скачать: CL | DM;

Вниз

Доступ к памяти процесса   Найти похожие ветки 

 
DeadMeat ©   (2003-05-11 21:55) [0]

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


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

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


 
Morfein ©   (2003-05-12 01:57) [2]

Существует такой команда процессора 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 02:30) [3]

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


 
Morfein ©   (2003-05-12 02:40) [4]

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


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

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


 
DeadMeat ©   (2003-05-12 14:11) [6]

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


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

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


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

> DeadMeat © (12.05.03 14:11)

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


 
AlexRush ©   (2003-05-13 11:05) [9]

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

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


 
DeadMeat ©   (2003-05-13 17:58) [10]

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.07.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
7-44931
Kooler
2003-05-04 01:43
2003.07.14
Именение уровня громкости через Делфи


14-44814
int64
2003-06-29 19:03
2003.07.14
5 месяцев в цайтноте.


7-44937
Ал
2003-04-30 15:18
2003.07.14
Как получить список часовых поясов, отсортированный как в 2000,XP


14-44892
gsv_
2003-06-26 16:26
2003.07.14
Сделал TdataModule -> TwebModule: не работает ISAPI/NSAPI


14-44890
AlexRush
2003-06-19 18:32
2003.07.14
---|Ветка была без названия|---