inserting self-checking code into the program's source code, the self-checking code being operable to perform dynamic integrity checks on overlapping intervals of the program, at least some of the overlapping intervals including portions of the self-checking code;