Heap spraying is probably the most simple and effective memory corruption attack, which fills the memory with malicious payloads and then jumps at a random location in hopes of starting the attacker’s routines. To counter this threat, Graffiti has been recently proposed as the first OS-agnostic framework for monitoring memory allocations of arbitrary applications at runtime; however, the main contributions of Graffiti are on the monitoring system, and its detection engine only considers simple heuristics which are tailored to certain attack vectors and are easily evaded. In this paper, we aim to overcome this limitation and propose Glyph as the first ML-based heap spraying detection system, which is designed to be effective, efficient, and resilient to evasive attackers. Glyph relies on the information monitored by Graffiti, and we investigate the effectiveness of different feature spaces based on information entropy and memory n-grams, and discuss the several engineering challenges we have faced to make Glyph efficient with an overhead compatible with that of Graffiti. To evaluate Glyph, we build a representative dataset with several variants of heap spraying attacks, and assess Glyph’s resilience against evasive attackers through selective hold-out experiments. Results show that Glyph achieves high accuracy in detecting spraying and is able to generalize well, outperforming the state-of-the-art approach for heap spraying detection, Nozzle. Finally, we thoroughly discuss the trade-offs between detection performance and runtime overhead of Glyph’s different configurations.