我试图跟踪C中的使用后免费错误.我的问题是,如果我有这样的代码:
A * ptrA = malloc(sizeof(A));
A * aliasA = ptrA;
// do something '
free(ptrA)
// some other code
B * ptrB = malloc(sizeof(B)); // assume this return same pointer as ptrA
//trying to use aliasA here
Run Code Online (Sandbox Code Playgroud)
只是想知道aliasA的使用是否是UAF错误?如果是的话,这里出了什么问题?
要清除这个问题,我认为最好添加一个小例子:
int main(){
int *ptr = (int *)malloc(4);
*ptr = 5;
int *ptr2 = ptr;
printf("%d\n", *ptr);
free(ptr);
int *new_ptr = malloc(4);
*new_ptr = 66;
printf("%d\n", *ptr2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
5
66
Run Code Online (Sandbox Code Playgroud)
(我检查ptr,并new_ptr在S2E:http://s2e.systems/这两个指针实际上指向同一个地址释放PTR后,同一地址分配给new_ptr.)
从上面的输出,似乎使用 …
我们已经知道免费使用后漏洞可能会导致安全问题.由于免费使用后错误是由悬空指针产生的,我的问题是如果悬挂指针没有在程序中使用,它们被认为是安全的还是良性的(不是那么危险)?