发布时间:2014-06-30 15:10:23
移位操作分为左移位<<和右移位>>两种,C规定若移位的右操作数为负数或大于等于左操作数的位宽(int为32位,char为8位)时,其行为未定义。1.符号类型的左移位左移位操作,空位部分填充零。如下图:错误代码:点击(此处)折叠或打开int si1, si2, sresult;sresult = si1 << si2.........【阅读全文】
发布时间:2014-06-27 11:34:44
1整数转换(包括隐式和显式(使用强制转换)),必须保证不会导致丢失或曲解数据。C99规定:a.当整数类型的值转换为另一个整数类型除了_Bool,如果该值可以被另一种类型表示,它的值是不变的。b.否则如果新类型是无符号的,则该值是通过反复增加或减去MAX+1(MAX是新类型可表述的最大值),直到该值在新类型的范围内。c.否.........【阅读全文】
发布时间:2014-06-26 14:25:25
OS;32bit ubuntu整型转换的规则:1.整形提升若变量的原型都能用int描述的话,其值范围小于INT_MAX的话就转换有符号int,其值范围大于INT_MAX的话就转换成无符号int。点击(此处)折叠或打开char c1, c2;c1 = c1 + c2 整型提升要求每个变量都提升为int大小。两个in.........【阅读全文】
发布时间:2014-06-25 16:33:16
环境:32位 ubuntu整数值可以因为异常情况(溢出,截断或符号错误)失效,导致可利用的漏洞。1.使用size_t表示一个对象的大小的所有整数值size_t为无符号整数类型。错误代码:点击(此处)折叠或打开char *copy(size_t n, char *str) {int i;if(p == NULL) {.........【阅读全文】
发布时间:2014-06-24 14:24:56
1.Do not modify constant valuesC99标准中说:若通过非const型左值修改const类型的对象,该行为是未定义。点击(此处)折叠或打开char const **cpp;char *cp;char const c = 'A';cpp = &cp; /* constraint violation */*cpp = &c; /*.........【阅读全文】