DSLs, Annotations, and Dynamic Instrumentation: Specifying the Memory Layout of a Memory Manager to Detect Bugs with Typestate