App - Système
ELF x64 - Logic bug
Juste une recommandation de lecture pour ceux qui cherchent à creuser le sujet de l’allocation mémoire par malloc () à l’occasion de ce challenge, en complément des docs cités dans les références, plutôt succins.
malloc () est une fonction complexe dont le code est la doc, pour ainsi dire. Toutefois, cette doc a pu contenir des erreurs, comme par exemple, dans malloc.c de la version 2.27 de GLIBC :
/* Size of the chunk below P. Only valid if prev_inuse (P). */
#define prev_size(p) ((p)->mchunk_prev_size)
...corrigé plus tard, comme par exemple dans la version 2.29 (noter l’apparition du point d’exclamation avant "prev_inuse (P)"...) :
/* Size of the chunk below P. Only valid if !prev_inuse (P). */
#define prev_size(p) ((p)->mchunk_prev_size)
La meilleure explication sur le fonctionnement de malloc () et ses exploitations possibles figure dans une contribution dans à Phrack magazine qui remonte à 2001 :
http://www.phrack.org/issues/57/8.html
Sans doute, les explications doivent être actualisées un peu, mais il apparaîtra rapidement à celui qui a lu les commentaires de mallo.c, tout particulièrement de la "structure" malloc_chunk, que celui qui a rédigé cette contribution maîtrisait vraiment son sujet. En particulier, les schémas décrivant la manière dont la "structure" malloc_chunk s’applique à un chunk selon sa nature et celle du chunk qui le précède...