如何在内存池中找到一个字节序列?

本文关键字:一个 字节 内存 | 更新日期: 2023-09-27 17:52:16

我正在寻找一种在较大的字节数组中搜索N个连续字节的方法。

这是我目前为止的一次尝试。

public int FindOffset() {
    byte[] bytesToFind = new byte[] { 0x77, 0x35, 0x94, 0x00 };
    int currentOffset = 0;
    for(;;) {
        byte[] mem = MemoryReader.Read(currentOffset, 4);
        if(bytesToFind == mem || mem == bytesToFind)
        {
            MessageBox.Show(Offset.ToString());
            break;
        }
        currentOffset++;
    }
    return currentOffset;
}

MemoryReader.Read返回一个字节数组

如何在内存池中找到一个字节序列?

  1. Byte数组是一个引用类型。因此==运算符比较的指针不是实值。要纠正它,比较每个值:Test[0] == mem[0] && Test[1] == mem[1] && Test[2] == mem[2] && Test[3] == mem[3]
  2. 你应该使用另一种算法(例如Knuth-Morris-Pratt算法)

我觉得你快成功了。你比较的是引用而不是数组的值。使用Enumerable.SequenceEqual,完成工作。

for(int Offset =0;Offset<Writer.Length;Offset++)
{
    byte[] mem = Save.Read(Offset, 4);
    if(mem.SequenceEqual(Test))
    {
        MessageBox.Show(Offset.ToString());
        break;
    }
}