The document presents an approach for effective memory protection using dynamic tainting. It discusses assigning taint marks to memory and pointers at different stages, such as static allocation, dynamic allocation, and pointer creation. It also covers propagating taint marks when pointers are derived from other pointers. The approach checks taint marks on every memory access to detect illegal accesses. It aims to prevent illegal memory accesses in deployed software using dynamic taint analysis while achieving acceptable overhead through probabilistic detection. Hardware and software implementations are proposed, with hardware taking a decoupling approach to taint storage and hardwiring for propagation and checking. The number of taint marks is limited to reduce overhead.