unlink
Código
Explicación Gráfica
Consulta esta gran explicación gráfica del proceso unlink:
Comprobaciones de Seguridad
Verifica si el tamaño indicado del chunk es el mismo que el prev_size indicado en el siguiente chunk
Verifica también que
P->fd->bk == P
yP->bk->fw == P
Si el chunk no es pequeño, verifica que
P->fd_nextsize->bk_nextsize == P
yP->bk_nextsize->fd_nextsize == P
Fugas
Un chunk desvinculado no limpia las direcciones asignadas, por lo que al tener acceso a él, es posible filtrar algunas direcciones interesantes:
Fugas de Libc:
Si P está ubicado en la cabeza de la lista doblemente enlazada,
bk
apuntará amalloc_state
en libcSi P está ubicado al final de la lista doblemente enlazada,
fd
apuntará amalloc_state
en libcCuando la lista doblemente enlazada contiene solo un chunk libre, P está en la lista doblemente enlazada, y tanto
fd
comobk
pueden filtrar la dirección dentro demalloc_state
.
Fugas de Heap:
Si P está ubicado en la cabeza de la lista doblemente enlazada,
fd
apuntará a un chunk disponible en el heapSi P está ubicado al final de la lista doblemente enlazada,
bk
apuntará a un chunk disponible en el heapSi P está en la lista doblemente enlazada, tanto
fd
comobk
apuntarán a un chunk disponible en el heap
Last updated