Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2009, 00:18   #1
DeniCPP
 
Аватар для DeniCPP
 
Регистрация: 04.04.2009
Сообщений: 9
Сообщение Работа с памятью запущенного процесса

Здравствуйте, подскажите пожалуйста, каким образом можно работать с памятью запущенного процесса? т.е. Искать определённые данные и изменять их?
Кто знает, выложите пример использования, или хотя бы подскажите в каком направлении копать, чтоб читать память процесса.

Вот программа на Delphi, кто знает, переведите плиз на C++

Код:
// чтение памяти процесса
Function MainReadByteIZFile(MainAddress, IDAgent:Cardinal):String;
var HandleWindow : cardinal; - хэндл процесса
ipBase: Pointer; - адрес в памяти процесса
IpBuf : longint; - буфер чтения
numberRead: DWORD; - можно поставить null чотб не смущал)
begin
HandleWindow:=OpenProcess(PROCESS_VM_READ,False,ID Agent); - как получить хэндл разберётесь сами)
ipBase:=ptr($00BE88A8);
ReadProcessMemory(HandleWindow, ipBase, Addr(ipbuf), 4, numberRead);
// предпоследний параметр равен 4 потому, что мне надо прочитать 4 байта
CloseHandle(HandleWindow);
end;


// пишем в память процесса
Function MainWriteByteIZFile(MainAddress, IDAgent:Cardinal):String;
var HandleWindow : cardinal;
ipBase: Pointer;
IpBuf : longint;
numberWrite: DWORD;
begin
HandleWindow:=OpenProcess(PROCESS_ALL_ACCESS,False ,IDAgent);
ipBuf:=StrToInt(Form1.Edit1.Text);
ipBase:=ptr($00BE88A8);
WriteProcessMemory(HandleWindow, ipBase, Addr(ipbuf), 4, numberWrite);
CloseHandle(HandleWindow);
end;
Талант – это желание работать, а во-вторых, работоспособность.

Последний раз редактировалось DeniCPP; 07.04.2009 в 00:21.
DeniCPP вне форума Ответить с цитированием
Старый 08.04.2009, 01:19   #2
DeniCPP
 
Аватар для DeniCPP
 
Регистрация: 04.04.2009
Сообщений: 9
По умолчанию

Вообщем вот что удалось откопать:

CreateProcess -получаем Handl И ProcId
WaitForInputIdle -ждем, пока запуститься
SuspendThread -приостанавливаем
VirtualProtectEx -получаем доступ на запись в секцию кода
WriteProcessMemory -собственно пишем
ResumeThread -возобновляем выполнение

Запускаю процесс:

Код:
STARTUPINFO startupInfo;
PROCESS_INFORMATION processInfo;
ZeroMemory( &startupInfo, sizeof(STARTUPINFO) );
startupInfo.cb = sizeof(startupInfo);
 
CreateProcess(NULL, "main.exe", NULL, NULL, FALSE,
HIGH_PRIORITY_CLASS | CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &processInfo);
 
 
CloseHandle(&processInfo.hThread);
CloseHandle(&processInfo.hProcess);
Каким образом надо ждать пока запустится? т.е. как выполнить WaitForInputIdle ?
Талант – это желание работать, а во-вторых, работоспособность.
DeniCPP вне форума Ответить с цитированием
Старый 09.04.2009, 12:38   #3
DeniCPP
 
Аватар для DeniCPP
 
Регистрация: 04.04.2009
Сообщений: 9
По умолчанию

Помогите мне написать эту функцию, сколько потребуется - заплачу.
Я совсем недавно начал изучать С++, и мало что пока знаю, но программа мне в короткий срок нужна.

Функция такого типа:

CreateProcess -получаем Handl И ProcId
WaitForInputIdle -ждем, пока запуститься
SuspendThread -приостанавливаем
VirtualProtectEx -получаем доступ на запись в секцию кода
WriteProcessMemory -собственно пишем
ResumeThread -возобновляем выполнение
Талант – это желание работать, а во-вторых, работоспособность.
DeniCPP вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с памятью процесса JRcoker Win Api 10 18.07.2009 22:22
WinApi работа с памятью, помогите! casper123 Помощь студентам 5 15.09.2008 08:13
Работа с памятью Shurik Hacker Общие вопросы Delphi 7 22.06.2007 20:51
Прямая работа с оперативной памятью Alex_Vlad Общие вопросы Delphi 2 05.12.2006 16:29