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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2012, 17:04   #11
Maincore
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 51
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin


BaseAddr := 0;
RecivedBytes := 0;
h:=FindWindow('#32770','My programm');
listbox1.Items.Add('handle '+inttostr(h));
mThreadID:= GetWindowThreadProcessId(h,@mProcessID);
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or PROCESS_VM_READ, False, mProcessID);
listbox1.Items.Add('Pid '+inttostr(mProcessID));
listbox1.Items.Add('OpenProcess = '+inttostr(hProcess));


 try
    if hProcess <> 0 then
    begin
       try
       //Запращиваем память по указанному адресу BaseAddr
        while VirtualQueryEx(hProcess, Pointer(BaseAddr), MBI, SizeOf(MBI)) <> 0 do
        begin
        //Если страница памяти доступна и не заблокирована для нас
        if ((MBI.State = MEM_COMMIT) and (not (MBI.Protect = PAGE_GUARD) or (MBI.Protect = PAGE_NOACCESS))) then
          begin
            try
              //Выделяем часть памяти равной размеру региона памяти из кучи ОЗУ
              Buff := AllocMem(MBI.RegionSize);
               //Читаем память этого региона
              if ReadProcessMemory(hProcess, MBI.BaseAddress, Buff, MBI.RegionSize, RecivedBytes) then
              begin
              memo1.Lines.Add(pansichar(Buff));
              end
               //Если не удачно
             else if (GetLastError <> ERROR_PARTIAL_COPY) and
                (GetLastError <> ERROR_ACCESS_DENIED) then
              begin
               //Ложный результат
                aFailMesage:=Format('Error #%d with RMessage: %s ', [GetLastError, SysErrorMessage(GetLastError)]);
                Exit;
              end;
            finally
              //Освобождаем занятую нами память
              FreeMem(Buff);
            end;
          end;
          //Увеличиваем(инкрементируем) стартовый адрес на размер региона
           BaseAddr := BaseAddr + MBI.RegionSize;
         //проверяем непревышает ли он размер 4 гб.
          if BaseAddr = GB4 then
          begin

            Exit;
          end;
        end;
       finally
        FreeAndNil(fs);
      end;
    end
    else
    begin
      aFailMesage:=Format('Error #%d with RMessage: %s ', [GetLastError, SysErrorMessage(GetLastError)]);
      Exit;
    end;
  finally
    CloseHandle(hProcess);
  end;
  end;
Почему в memo записываются не все данные?

Последний раз редактировалось Maincore; 14.08.2012 в 17:12.
Maincore вне форума Ответить с цитированием
Старый 14.08.2012, 20:19   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Потому что не исключено что Buff содержит в себе символ с кодом 0 - привычное так сказать окончание ASCIIZ строки. Мемо управляющие символы не любит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2012, 22:34   #13
Maincore
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 51
По умолчанию

Цитата:
Потому что не исключено что Buff содержит в себе символ с кодом 0 - привычное так сказать окончание ASCIIZ строки. Мемо управляющие символы не любит.
Что то я не очень понимаю, как найти мне нужный текст в этих данных?
Не могли бы вы подсказать как это можно реализовать
Maincore вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение значения из памяти запущенного процесса padsyukin Помощь студентам 2 09.03.2012 15:39
Редактирование памяти процесса Dima DDM Общие вопросы Delphi 0 25.12.2010 16:54
Защита памяти процесса. worldhero Фриланс 2 25.07.2010 11:15
Чтение данных из памяти процесса (need help) lexastik Win Api 10 26.02.2009 20:50
Редактирование памяти процесса Air Win Api 6 16.02.2008 20:15