C++-C++中数据溢出后数据本身是如何变化的?是移高位留低位,还是变成一个随机的数?
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);
}
移位和加法的溢出,直接舍去高位,取低位的,地址溢出才会出现无规律的随机数。
比如 int a[10], 但是你访问了print("%d", a[10])你就访问了一个未知的地址,数组越界是一个最典型的地址溢出,C是不会给你再编译的时候报错的,当你运行时,如果a[10]是个调用栈里面的值,不会crush,会输出一个int类型的这个地址上的数据,如果这个地址不在调用栈里面,就会segmentfault。