Binary Program Integrity Models for Defeating Code-Reuse Attacks