这段代码在 memset 上写了一个额外的字符,但为什么呢?
int main(int argc, char ?argv[]) {
char ?a, ?b;
a=(char ?)malloc(12);
b=(char ?)malloc(12);
if(!a || !b)
err(2, "malloc error.\\n");
bzero(a, 12); bzero(b, 12);
printf("%x %x (%i)\n", a, b, b?a); // b?a is d.
memset(a, (int)'a', 11);
memset(b, (int)'b', 11);
printf("a: %s\n", a);
printf("b: %s\n", b);
printf("???\n");
memset(a, (int)'a', b?a); // Heap?Overflow? Is this happening here ?
printf("a: %s\n", a);
free(a);
free(b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
脆弱性?如果这是密码,每次打印后都会有一个额外的字符?
c ×1