繁体   English   中英

整数缓冲区溢出

[英]Buffer overflow with integers

我有一个非常基本的问题。 假设我有两个变量(uint16_t a,uint16_t b)并且在 memory 中它们彼此相邻对齐,例如 a=> 0x0 => 0x15 和 b=> 0x16 到 0x31

让我们假设 a = 0, b = 65535,

(1) if i increment b(b++), b will become 0 but will it affect 'a' 0th bit?
(2) if i right shift b( b = b << 1), will it affect 'a' ?

谢谢

不,除非你用指针或演员做奇怪的事情。

我会说它不会,因为假设 a 从 0x00 和 a=65535 开始,当你添加一个时,你应该(总是)充其量得到奇怪的行为(或分段错误)。 虽然我不是 100% 确定,但我 90% 确定左移不会影响旁边的 memory。

答案是不。

ab是一个uint16_t ,所以它是一个无符号类型。 并且无符号溢出(或环绕)在 C 中定义明确。它不会改变除此之外的 memory。

不,正确设计的系统不会发生这种情况。 另外,我要指出,按照惯例,您的数字符号是不正确的。 0x 通常用于表示十六进制数字,包括 C 语言,但从您的问题的上下文来看,您无缘无故地将十进制基数作为前缀。 例如,0x31 等于十进制的 49。 并且 16+16 不等于 49。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM