C++-C++中数据溢出后数据本身是如何变化的?是移高位留低位,还是变成一个随机的数?

发布于 10-30 05:35 字数 537 浏览 1361 评论 2

void CMD5Checksum::Update( BYTE* Input, ULONG nInputLen ) 
{
//Compute number of bytes mod 64
UINT nIndex = (UINT)((m_nCount[0] >> 3) & 0x3F);
//Update number of bits
if ( ( m_nCount[0] += nInputLen << 3 ) < ( nInputLen << 3) )
//对条件成立的部分有疑惑
{
m_nCount[1]++;
}

m_nCount[1] += (nInputLen >> 29);
………………
// Buffer remaining input
memcpy( &m_lpszBuffer[nIndex], &Input[i], nInputLen-i);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泛泛之交2017-07-10 01:05:38

移位和加法的溢出,直接舍去高位,取低位的,地址溢出才会出现无规律的随机数。
比如 int a[10], 但是你访问了print("%d", a[10])你就访问了一个未知的地址,数组越界是一个最典型的地址溢出,C是不会给你再编译的时候报错的,当你运行时,如果a[10]是个调用栈里面的值,不会crush,会输出一个int类型的这个地址上的数据,如果这个地址不在调用栈里面,就会segmentfault。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文