Я пытаюсь сканировать всю память процесса, но не успеваю ... Что я делаю: для тестов я использую блокнот, поэтому я пишу там % B и этот значения в HEX: 25 (%) и 42 (B). Таким образом, код:Сканирование всей памяти процесса с помощью ReadProcessMemory
while (VirtualQueryEx(PIDHandle, Pointer(MemStart), MemInfo, SizeOf(MemInfo)) <> 0) do
begin
if ((MemInfo.State = MEM_COMMIT) and (not (MemInfo.Protect = PAGE_GUARD)
or (MemInfo.Protect = PAGE_NOACCESS)) and (MemInfo.Protect = PAGE_READWRITE)) then
begin
SetLength(Buff, MemInfo.RegionSize);
if (ReadProcessMemory(PIDHandle, MemInfo.BaseAddress, Buff,
MemInfo.RegionSize, ReceivedBytes)) then
begin
for I := 0 to SizeOf(Buff) do
begin
if (IntToHex(Buff[i], 1) = '25') and (IntToHex(Buff[i+2], 1) = '42') then
Form1.Memo1.Lines.Append(IntToHex(Buff[i], 1));
end;
end;
end;
MemStart:= MemStart + MemInfo.RegionSize;
end;
CloseHandle(PIDHandle);
end;
Значение переменной «Буфф» является TBytes (я читал о терабайт и думаю, что это так же, как массив байт). Поэтому я конвертирую байты в Hex и ищу значения: 25 и 42 соответственно. Код выглядит так:
if (IntToHex(Buff[i], 1) = '25') and (IntToHex(Buff[i+2], 1) = '42') then
Потому что они имеют 00 между шестнадцатеричными значениями. Поэтому мне нужно добавить «+2». Как я могу сканировать всю память для этих значений?
Благодарим за внимание и внимание. Но для меня все еще проблема, почему программа не может найти значения внутри памяти блокнота. Если я использую ReadProcessMemory как: ReadProcessMemory (PIDHandle, Pointer ($ 00367ED0), Buff, MemInfo.RegionSize, ReceivedBytes), с нужным указателем адреса, он находит. Но, сканируя всю память, ничего не находите. Извините за неудобство ... – HwTrap
Помогло ли мое последнее обновление? –
Да ... Спасибо !!! – HwTrap