C#:检测程序内存中字节变化的最快方法
本文关键字:变化 方法 字节 检测 程序 内存 | 更新日期: 2023-09-27 18:27:27
我用Easyhook将DLL注入进程,我可以用Marshal.ReadByte.读取特定内存位置的字节
现在,我想在该字节发生更改时得到通知。当我想尽快发现变化时,你认为最好的方法是什么?
不幸的是,除非您能够挂接函数调用,该函数调用会修改有问题的内存,以告诉您外部进程何时执行了更改,否则您的最佳选择是创建一个线程,该线程只会反复旋转并检查内存中的新值。
我建议不要让它"尽可能快",因为这会消耗大量CPU,你需要问自己"从更改到我收到通知之间最长的延迟是什么"。例如,如果你的答案是"0.1秒",那么你的池化循环看起来就像
private void PoolingLoop()
{
var lastValue = Marshal.ReadByte(_location)
while(_running)
{
Thread.Sleep(100);
var newValue = Marshal.ReadByte(_location);
if(lastValue != newValue)
DoThisOnMemoryChanged();
lastValue = newValue;
}
}