unlink
Code
Γραφική Εξήγηση
Δείτε αυτή τη σπουδαία γραφική εξήγηση της διαδικασίας unlink:
Έλεγχοι Ασφαλείας
Ελέγξτε αν το υποδεικνυόμενο μέγεθος του chunk είναι το ίδιο με το prev_size που υποδεικνύεται στο επόμενο chunk
Ελέγξτε επίσης ότι
P->fd->bk == P
καιP->bk->fw == P
Αν το chunk δεν είναι μικρό, ελέγξτε ότι
P->fd_nextsize->bk_nextsize == P
καιP->bk_nextsize->fd_nextsize == P
Διαρροές
Ένα αποσυνδεδεμένο chunk δεν καθαρίζει τις κατανεμημένες διευθύνσεις, οπότε έχοντας πρόσβαση για να το διαβάσετε, είναι δυνατόν να διαρρεύσουν κάποιες ενδιαφέρουσες διευθύνσεις:
Διαρροές Libc:
Αν το P βρίσκεται στην κεφαλή της διπλά συνδεδεμένης λίστας, το
bk
θα δείχνει στοmalloc_state
στη libcΑν το P βρίσκεται στο τέλος της διπλά συνδεδεμένης λίστας, το
fd
θα δείχνει στοmalloc_state
στη libcΌταν η διπλά συνδεδεμένη λίστα περιέχει μόνο ένα ελεύθερο chunk, το P είναι στη διπλά συνδεδεμένη λίστα, και τόσο το
fd
όσο και τοbk
μπορούν να διαρρεύσουν τη διεύθυνση μέσα στοmalloc_state
.
Διαρροές Heap:
Αν το P βρίσκεται στην κεφαλή της διπλά συνδεδεμένης λίστας, το
fd
θα δείχνει σε ένα διαθέσιμο chunk στο heapΑν το P βρίσκεται στο τέλος της διπλά συνδεδεμένης λίστας, το
bk
θα δείχνει σε ένα διαθέσιμο chunk στο heapΑν το P είναι στη διπλά συνδεδεμένη λίστα, τόσο το
fd
όσο και τοbk
θα δείχνουν σε ένα διαθέσιμο chunk στο heap
Last updated