小编Tso*_*nos的帖子

堆溢出还是缓冲区溢出?

这段代码在 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

0
推荐指数
1
解决办法
140
查看次数

标签 统计

c ×1