Показать сообщение отдельно
  #3  
Старый 29.06.2012, 18:33
mixtape774 mixtape774 вне форума
Прохожий
 
Регистрация: 29.06.2012
Сообщения: 2
Репутация: 10
По умолчанию

Код:
var
  ProcessID, Addr, Value, BytesRead: DWord;
  ProcessHandle: THandle;
  Mbi: TMemoryBasicInformation;
  i: Cardinal;
  Buf: PChar;
begin
  ProcessHandle := FindWindow(nil, PChar('Заголовок окна процесса'));
  GetWindowThreadProcessId(ProcessHandle, @ProcessID);
  Value := 12321;
  ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_ALL_ACCESS or PROCESS_VM_OPERATION, false, ProcessID);
    if ProcessHandle <> 0 then
      try
        Addr := 0;
          while VirtualQueryEx(ProcessHandle, Pointer(Addr), Mbi, SizeOf(Mbi)) <> 0 do
            begin
              if (Mbi.State = MEM_COMMIT) and not ((Mbi.Protect and PAGE_GUARD) = PAGE_GUARD) then
                begin
                  GetMem(Buf, Mbi.RegionSize);
                    try
                      if ReadProcessMemory(ProcessHandle, Mbi.BaseAddress, Buf, Mbi.RegionSize, BytesRead) then
                        begin
                          for i := 0 to BytesRead - SizeOf(Value) do
                            begin
                              if PDWord(@Buf[i])^ = Value then Memo1.Lines.Add('$' + IntToHex(Integer(Cardinal(Mbi.BaseAddress) + i), 8));
                            end;
                        end
                      else
                    finally
                      FreeMem(Buf);
                    end;
                end;
              Addr := Addr + Mbi.RegionSize;
            end;
      finally
        CloseHandle(ProcessHandle);
      end;
end;
Админ: Пользуемся тегами для оформления кода!

Но это не то, что нужно
Ответить с цитированием