unlink
Kod
Graficzne wyjaśnienie
Sprawdź tę świetną graficzną ilustrację procesu unlink:
Sprawdzenia bezpieczeństwa
Sprawdź, czy wskazany rozmiar fragmentu jest taki sam jak prev_size wskazany w następnym fragmencie
Sprawdź również, czy
P->fd->bk == P
iP->bk->fw == P
Jeśli fragment nie jest mały, sprawdź, czy
P->fd_nextsize->bk_nextsize == P
iP->bk_nextsize->fd_nextsize == P
Wycieki
Niepołączony fragment nie czyści przydzielonych adresów, więc mając do niego dostęp, można wyciec niektóre interesujące adresy:
Wycieki z Libc:
Jeśli P znajduje się na początku dwukierunkowej listy,
bk
będzie wskazywać namalloc_state
w libcJeśli P znajduje się na końcu dwukierunkowej listy,
fd
będzie wskazywać namalloc_state
w libcGdy dwukierunkowa lista zawiera tylko jeden wolny fragment, P znajduje się na liście dwukierunkowej, a zarówno
fd
, jak ibk
mogą wyciec adres wewnątrzmalloc_state
.
Wycieki z Heap:
Jeśli P znajduje się na początku dwukierunkowej listy,
fd
będzie wskazywać na dostępny fragment w stercieJeśli P znajduje się na końcu dwukierunkowej listy,
bk
będzie wskazywać na dostępny fragment w stercieJeśli P znajduje się na liście dwukierunkowej, zarówno
fd
, jak ibk
będą wskazywać na dostępny fragment w stercie
Last updated