C#:检测程序内存中字节变化的最快方法

本文关键字:变化 方法 字节 检测 程序 内存 | 更新日期: 2023-09-27 18:27:27

我用Easyhook将DLL注入进程,我可以用Marshal.ReadByte.读取特定内存位置的字节

现在,我想在该字节发生更改时得到通知。当我想尽快发现变化时,你认为最好的方法是什么?

C#:检测程序内存中字节变化的最快方法

不幸的是,除非您能够挂接函数调用,该函数调用会修改有问题的内存,以告诉您外部进程何时执行了更改,否则您的最佳选择是创建一个线程,该线程只会反复旋转并检查内存中的新值。

我建议不要让它"尽可能快",因为这会消耗大量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;
    }
}