  Fine-grained memory protection for C and C++ programs must track individual
objects (or pointers), and store bounds information per object (pointer). Its
cost is dominated by metadata updates and lookups, making efficient metadata
management the key for minimizing performance impact. Existing approaches
reduce metadata management overheads by sacrificing precision, breaking binary
compatibility by changing object memory layout, or wasting space by excessive
alignment or large shadow memory spaces. We propose FRAMER, a software
capability model for object-granularity memory protection. Its efficient
per-object metadata management mechanism enables direct access to metadata by
calculating their location from a tagged pointer to the object and, for large
objects, a compact supplementary table. The number of bits in this tag and the
size of the supplementary table are balanced to minimize both using a novel
technique. FRAMER is a general proposal for object metadata management with
potential applications in memory safety, type safety, thread safety and garbage
collection that improves over previous solutions by (1) increasing locality of
reference by having objects carry their metadata, (2) streamlining expensive
metadata lookups, (3) saving space by avoiding superfluous alignment and
padding, (4) avoiding internal object memory layout changes.
