5. glibc-2.3.5 for ARM 的 memset 函数 bug
函数原型:
void *memset(void *s, int c, size_t n);
当 n < 8 时功能正常。
当 n >= 8 时,实际填充到内存中的字节不再一致,作如下分布:
s[4*i+0] = (char)c;
s[4*i+1] = (char)c | (char)(c >> 8);
s[4*i+2] = (char)c | (char)(c >> 8) | (char)(c >> 16);
s[4*i+3] = (char)c | (char)(c >> 8) | (char)(c >> 16) | (char)(c >> 24);
可能会导致如下的错误:
memset(buf, '\xf0', 8);
预想的 buf 中的数据:
f0, f0, f0, f0, f0, f0, f0, f0
实际上,由于 '\xf0' 转为 int 型后为 0xfffffff0, 数据为:
f0, ff, ff, ff, f0, ff, ff, ff