Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск текста в памяти процесса / 16 сообщений из 16, страница 1 из 1
16.03.2012, 12:02
    #37708182
Sanya111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
Привет.
Ищу строку в памяти процесса.
Подскажите, пожалуйста, что не так в строке if PDWord(@Buf[I])^ = Value then begin. При работе выскакивает ошибка.
Не пинайте сильно только начал изучать работу с памятью. Код не мой, пытаюсь разобраться.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
procedure TForm11.Button1Click(Sender: TObject);
var
ProcessID: DWord;
  ProcessHandle: THandle;
  Mbi: TMemoryBasicInformation;
  Addr: DWord;
  Value: DWord;
  I: Cardinal;
  Buf: PChar;
  BytesRead: DWord;
  wHandle, ttHandle: integer;
  Value: integer; 

begin
wHandle := FindWindow(nil, 'Form1'); // Буду искать значения в другом приложении Form1
if wHandle <> 0 then  begin
Value:=123; // будем искать
ttHandle := GetWindowThreadProcessId(wHandle, @ProcessID);
ProcessHandle  := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
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, size_t(BytesRead)) then
     begin
      //
      // Ищем значение типа DWORD в буфере
      //
      for I := 0 to BytesRead - SizeOf(Value) do  begin

        if PDWord(@Buf[I])^ = Value then  begin // ВОТ ЗДЕСЬ ОШИБКА
                // Найдено, выводим
memo2.lines.add('Value ' + IntToStr(Value) + ' found at ' +
         IntToHex(Integer(Cardinal(Mbi.BaseAddress) + I), 8));
      end;
      end;
     end;

    finally
     FreeMem(Buf);
    end;
   end;

   // Вычисляем адрес следуюшего региона
   Addr := Addr + Mbi.RegionSize;
  end;

 finally
  CloseHandle(ProcessHandle);
 end;
end;
...
Рейтинг: 0 / 0
16.03.2012, 12:06
    #37708193
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
Так и пишет " я выскакиваю" лови меня.
...
Рейтинг: 0 / 0
16.03.2012, 12:12
    #37708207
Sanya111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
Project Project2.exe raised exception class $C0000005 with massage 'access violation at 0x00514d97: read of address 0x7ffd3000'
...
Рейтинг: 0 / 0
16.03.2012, 12:52
    #37708292
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
Неверное обращение к бибилиотеки, прямо или косвенно. В этой области находится одна из системных библиотек. В общем тяжело тебе будет.
...
Рейтинг: 0 / 0
16.03.2012, 13:33
    #37708372
Sanya111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
Anatoly Podgoretsky, спасибо
а как-то можно ограничить это обращение?
Например
if BytesRead=4096 , то работаем дальше.
С этим условием все получается.
Это вообще правильно так сделать или я несу чушь?
И надежен ли будет поиск?
...
Рейтинг: 0 / 0
16.03.2012, 13:52
    #37708406
Sanya111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
пока решил поставить
try
except
end

Подскажите, пожалуйста, как-то можно узнать с какого адреса искать чтобы не обращаться к системным библиотекам?
...
Рейтинг: 0 / 0
16.03.2012, 14:29
    #37708483
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
Sanya111, зачем тебе адрес? Есть точки останова (breakpoints) и волшебные кнопки F8, F7
...
Рейтинг: 0 / 0
16.03.2012, 14:41
    #37708509
Sanya111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
скачал исходник MemorySeeker с http://www.delphisources.ru
наверное лучшее что можно найти чтобы разобраться начинающим

спасибо всем за помощь
...
Рейтинг: 0 / 0
16.03.2012, 14:53
    #37708537
Barmaley57
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
Sanya111, artmoney изобретаешь? ))
...
Рейтинг: 0 / 0
16.03.2012, 15:02
    #37708567
Sanya111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
Barmaley57,
нет, третий год пишу программу для покера :)
...
Рейтинг: 0 / 0
16.03.2012, 23:23
    #37709363
S.PR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
и что там в PDWord(@Buf[I])^?
...
Рейтинг: 0 / 0
17.03.2012, 00:15
    #37709399
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
Sanya111Barmaley57,
нет, третий год пишу программу для покера :)

Настоящие деньги можно или украсть, или заработать.
А вот выиграть - шансов очень мало.
...
Рейтинг: 0 / 0
17.03.2012, 00:28
    #37709416
ДжекНепотрошитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
defecatorНастоящие деньги можно или украсть, или заработать.
А вот выиграть - шансов очень мало.

Никто и не предполагает, что программа для покера деньги будет выигрывать ...
...
Рейтинг: 0 / 0
17.03.2012, 00:35
    #37709420
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
ДжекНепотрошительdefecatorНастоящие деньги можно или украсть, или заработать.
А вот выиграть - шансов очень мало.

Никто и не предполагает, что программа для покера деньги будет выигрывать ...

А для чего её тогда писать целых три года ?
...
Рейтинг: 0 / 0
19.03.2012, 10:24
    #37711310
Sanya111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
Конечно программа деньги выигрывать не сможет, но очень сильно будет помогать в игре.
Договорился с разработчиками artmoney на счет dll, который будет искать текст в памяти.
Потом хочу купить и исходник.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
14.09.2019, 19:28
    #39861941
Mr Robot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск текста в памяти процесса
Компоненты XeonCOM "TRWProcessMemory" #Delphi XE
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск текста в памяти процесса / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]