如何在内存池中找到一个字节序列?
本文关键字:一个 字节 内存 | 更新日期: 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
返回一个字节数组
- Byte数组是一个引用类型。因此==运算符比较的指针不是实值。要纠正它,比较每个值:
Test[0] == mem[0] && Test[1] == mem[1] && Test[2] == mem[2] && Test[3] == mem[3]
- 你应该使用另一种算法(例如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;
}
}