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

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

WriteProcessMemory


Ihor Osov'yak ©   (2002-10-16 16:54:00) 

Здравствуте.

Имею проблемы с сабжем.

Сабж исползую для подмены апишных вызовов некого процесса методом патча (то есть переписывание адресов в таблице импорта). Работает нормально для всех модулей процесса, кроме mfc42.dll.

В двух словах о технике патча: внедрение своей длл в адресное постранство чужого процесса методом хука,
затем анализ таблиц импорта (динамически подгружаемые библиотеки меня пока не интересуют),
а далее патч через WriteProcessMemory. Прямое присвоение не проходит, несмотря на то, что находимся в адресном пространстве чужого процесса, наверное нужны определенные права доступа соотв. областям памяти процесса.

Чего всемогучий Аll посоветовать может?

Зы - getLastError после неудачного WriteProcessMemory возвращает 000003E6


Ihor Osov'yak   (2002-10-16 18:06:00) [1]

еще раз спасибо. Сорри за орЯчатки - результат нескольких бессоных ночей налицо ....


Digitman   (2002-10-16 17:44:00) [2]

сУда надо дать нач.адрес и размер области памяти в ВАП целевого процесса, которую ты собираешься модифицировать последующим вызовом WriteProcessMemory()


Ihor Osov'yak   (2002-10-16 17:16:00) [3]

2 Digitman © (16.10.02 17:05)

Спасибо за совет. По неопытности не вызывал:

WriteProcessMemory(GetCurrentProcess,Func,@NewFunc,4,count);

Зы
Посмотрел в Msdn

BOOL VirtualProtectEx(
HANDLE hProcess, // handle to process
LPVOID lpAddress, // region of committed pages
SIZE_T dwSize, // size of region
DWORD flNewProtect, // desired access protection
PDWORD lpflOldProtect // old protection
);

...

lpAddress
[in] Pointer to the base address of the region of pages whose access protection attributes are to be changed.
All pages in the specified region must be within the same reserved region allocated when calling the VirtualAlloc or VirtualAllocEx function using MEM_RESERVE. The pages cannot span adjacent reserved regions that were allocated by separate calls to VirtualAlloc or VirtualAllocEx using MEM_RESERVE.

Не совсем понятно, что суда дать - базовый адресс длл соедет (те ее хендлер?)




Digitman   (2002-10-16 17:05:00) [4]

{ Invalid access to memory location. }
ERROR_NOACCESS = 998;

Видимо, ты неверно (с неверными параметрами) вызываешь VirtualProtectEx()... если вообще вызываешь...


Наверх

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