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

Тема в разделе "Delphi - Система", создана пользователем ALe}{@nd, 2 дек 2007.

Статус темы:
Закрыта.
  1. ALe}{@nd

    ALe}{@nd Гость

    Доброе время суток всем! У меня такая проблемма. мне необходимо чтобы программа считвала даные из ячейки памяти и в соответствии с этими даннымми выполняла те или иные действия. На счот действий мне всё ясно, а вот как считать данные из ячейки определённого процеса я незнаю! Помогите пожалусто ;) !!! Зарание благодарен !!!
     
  2. ALe}{@nd

    ALe}{@nd Гость

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

    root Гость

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

    zubr Гость

    Для: 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)
     
  5. ALe}{@nd

    ALe}{@nd Гость

    Для: zubr
    Спосибо!!! Сейчас попробую ;)
     
  6. root

    root Гость

    Для: ALe}{@nd®
    Код (Text):
    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;
     
  7. ALe}{@nd

    ALe}{@nd Гость

    Для: root
    Спасибо!!! :)
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей