遗留代码似乎溢出了,我不确定



我现在正在处理一些遗留代码(将其中一些转换为c#),并且我偶然发现了一个问题:

创建一个字节数组(长度为ulcLen):

CSLAutoArray<BYTE> pMem(new BYTE[ulcLen]);

现在一些东西被放入字节数组,之后CRC/哈希值应该被写入前四个字节(ULONG/UInt32):

__CfgCRC(pMem + sizeof(ULONG), ulcLen - sizeof(ULONG))

->

inline ULONG __CfgCRC(const void* const cpcMem, const ULONG ulcMemSize)
{
  ULONG ulRes = 0;
  const BYTE* const cpcUseMem = reinterpret_cast<const BYTE*>(cpcMem);
  for(const BYTE* pcLook = cpcUseMem; cpcUseMem + ulcMemSize > pcLook; pcLook++)
  {
    ulRes ^= static_cast<ULONG>(*pcLook);
    //[...]
  };
  return ulRes;
};

现在,是只有我一个人,还是static_cast在for循环结束时读取字节数组末尾的1/2/3字节?由于pcLook(内存指针)增加,直到它达到数据的完整长度,(ulclen + sizeof(ULONG)) ?还是我错了?或者static_cast不知何故没有读取到数组的末尾?(CSLAutoArray是某种托管指针类,但据我所知,它不与此代码干扰)

*pcLook只是一个BYTE,所以不,它一次只读取1个八位字节。cast只是转换BYTE而不是pcLock所指向的。

相关内容

最新更新