use*_*312 -1 c linux exploit glibc
有人可以解释一下为什么连续两次释放导致崩溃,但释放第一个,然后是b,然后再次不会崩溃?
我知道free会将堆块插入双链接空闲列表中.释放两次会在空闲列表中两次插入相同的块.但为什么崩溃发生?
int *a = malloc(8);
int *b = malloc(8);
free(a);
// free(a); //Would crash!
free(b);
free(a); //No crash
Run Code Online (Sandbox Code Playgroud)
因为在C lingo中,未定义的行为就是:undefined.什么都可能发生.
另见man 3 free:
[...]如果
free(ptr)之前已经调用过,则会发生未定义的行为.