Чтение даных из указаной ячейки памяти процесса

  • Автор темы ALe}{@nd
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

ALe}{@nd

Гость
#1
Доброе время суток всем! У меня такая проблемма. мне необходимо чтобы программа считвала даные из ячейки памяти и в соответствии с этими даннымми выполняла те или иные действия. На счот действий мне всё ясно, а вот как считать данные из ячейки определённого процеса я незнаю! Помогите пожалусто ;) !!! Зарание благодарен !!!
 
A

ALe}{@nd

Гость
#2
ну примерно ;) , это отдел памяти имеющий адрес в виде шестнадцатиричного числа и хронящий в себе оределённое значение, значение может хранитца в различных системах исчисления, в зависимости от объёма ячейки и т.д. или я что-то путаю :unsure: ???(если путаю поправте) Вот мне инадо узнать каким образом можно считать даныые из некотророго шестнадцатитичного адреса памяти и занести её в некотроую переменную. По такому принципу работают "тренеры для игр" только там чаще всего значение замораживается!
 
R

root

Гость
#3
Для: ALe}{@nd®
asm
MOV AL,[115]
end
Где AL -это младший регистр
115-это адрес
P.S по этому принципу некогда была написана программа артмани которая искала значения в памяти и меняла их на дугое.%)
 
Z

zubr

Гость
#4
Для: ALe}{@nd®
Для Windows не все так просто. Там виртуальная организация памяти.
Последовательность действий такова:
1. Открываем процесс: ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ or
PROCESS_VM_OPERATION, false, ProcessID);
2. Перечисляем все регионы виртуальной памяти процесса: while VirtualQueryEx(ProcessHandle, Pointer(Addr), Mbi, SizeOf(Mbi)) <> 0 do
begin ...
3. Читаем весь регион в выделенный буфер: ReadProcessMemory(ProcessHandle, Mbi.BaseAddress, Buf,
Mbi.RegionSize, BytesRead)
 
R

root

Гость
#6
Для: ALe}{@nd®
Код:
var
h2 : thandle;
j: integer;
i:cardinal;
buf : Byte;
hw: THandle;
pidw,pid:Cardinal;
str:string;
adr:cardinal;
begin
hw:= FindWindow(nil,'Безымянный -Блокнот');
pidw:= GetWindowThreadProcessId(hw,PID);
h2 := OpenProcess (PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, PID);
if h2 = 0 then exit;
ReadProcessMemory(h2,pointer($100000),@adr,4,i);
for j:=0 to 255 do
begin
ReadProcessMemory(h2,ptr(adr+j),@buf,1,i);
case buf of
32..126,192..255:str:=str+chr(buf);
end;
end;
showmessage(str);
CloseHandle(h2);
end;
 
Статус
Закрыто для дальнейших ответов.