Почему нельзя вызывать ReadProcessMemory в бесконечном цикле?
На C# написал программку, которая сначала один раз определяет указатель на процес
pname = ProcName.Replace(".exe", "");
Process[] proclist = Process.GetProcesses();
foreach (Process pr in proclist)
{
if (pr.ToString() == "System.Diagnostics.Process (" + pname + ")")
{
hand = pr.Handle;
}
}
после чего идет бесконечная вычитка по известному адресу памяти (адрес взят из CheatEngine)
ReadProcessMemory(hand, (IntPtr)Address, ret, (UInt32)ret.Length, ref o);
Thread.Sleep(1);
Все запускается и работает, но недолго, где-то через минуту начинает возвращать нули. Если повторить определение указателя на процесс и перезапустить поток с бесконечным циклом, то снова работает пару минут.
Ну стоит понять как ведется работа с памятью. К примеру сборщик мусор .NET при сборке проводит дефрагментацию для малых объектов и через некоторое время данные по известному адресу пропадут. Другие сборщики мусора могут поступать аналогично. Может быть защита и т.д. Так что проблема тут скорее всего в приложении из которого вы и читаете данные.