parent
817917d22a
commit
017fce75b8
|
@ -66,13 +66,19 @@ int DataStore::Read(uint offset, Buffer& bs)
|
||||||
|
|
||||||
uint realOffset = offset - VirAddrBase;
|
uint realOffset = offset - VirAddrBase;
|
||||||
// 检查是否越界
|
// 检查是否越界
|
||||||
if(Strict && realOffset + size > Data.Length()) return -1;
|
// if(Strict && realOffset + size > Data.Length()) return -1;
|
||||||
|
// 只要起始位置在区间内都读,数据超长就返回能返回的!
|
||||||
|
if(Strict && realOffset > Data.Length()) return -1; // 起始地址越界直接返回
|
||||||
|
|
||||||
// 执行钩子函数
|
// 执行钩子函数
|
||||||
if(!OnHook(realOffset, size, false)) return -1;
|
if(!OnHook(realOffset, size, false)) return -1;
|
||||||
|
|
||||||
// 从数据区读取数据
|
// 从数据区读取数据
|
||||||
return bs.Copy(0, Data, realOffset, size);
|
// return bs.Copy(0, Data, realOffset, size);
|
||||||
|
// 取真实长度
|
||||||
|
int maxsize = offset + size > Data.Length() ? Data.Length() : size;
|
||||||
|
bs.SetLength(maxsize);
|
||||||
|
return bs.Copy(0, Data, realOffset, maxsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DataStore::OnHook(uint offset, uint size, bool write)
|
bool DataStore::OnHook(uint offset, uint size, bool write)
|
||||||
|
@ -132,11 +138,13 @@ Area::Area()
|
||||||
Size = 0;
|
Size = 0;
|
||||||
Hook = nullptr;
|
Hook = nullptr;
|
||||||
}
|
}
|
||||||
|
// 参数是读命令里面的偏移和大小
|
||||||
bool Area::Contain(uint offset, uint size)
|
bool Area::Contain(uint offset, uint size)
|
||||||
{
|
{
|
||||||
// 数据操作口只认可完整的当前区域
|
// 数据操作口只认可完整的当前区域
|
||||||
return Offset <= offset && Offset + Size >= offset + size;
|
//return Offset <= offset && Offset + Size >= offset + size;
|
||||||
|
// 只要搭边就算数
|
||||||
|
return offset <= Offset + Size && offset + size >= Offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************** 数据操作接口 ************************************/
|
/****************************** 数据操作接口 ************************************/
|
||||||
|
|
|
@ -44,9 +44,11 @@ bool TokenDataMessage::ReadData(const DataStore& ds)
|
||||||
{
|
{
|
||||||
ByteArray bs(Size);
|
ByteArray bs(Size);
|
||||||
auto ds2 = (DataStore*)&ds;
|
auto ds2 = (DataStore*)&ds;
|
||||||
ds2->Read(Start, bs);
|
if (ds2->Read(Start, bs) != -1)return ReadData(bs);
|
||||||
|
|
||||||
return ReadData(bs);
|
// 出错返回false
|
||||||
|
bs.SetLength(0);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 读取数据
|
// 读取数据
|
||||||
|
|
Loading…
Reference in New Issue