1. A method of creating a self-checking software program, the program being embodied on a computer-readable medium, the method comprising: (a) inserting multiple self-checking code sequences into the program's source code; (a)(1) compiling the program's source code to form object code; (a)(2) rearranging basic blocks of the program's object code such that the distribution of the multiple self-checking code sequences is changed; (b) inserting a plurality of correctors into the rearranged object code; (c) assigning the self-checking code sequences to overlapping portions of the program, each of said portions containing at least one corrector, and at least some of said portions containing at least part of one or more of said self-checking code sequences, wherein each self-checking code sequence is operable to calculate a function of at least one of said portions; and (d) assigning values to the correctors, the value of each corrector being chosen such that the function calculated by a self-checking code sequence assigned to a given portion of the program containing a given corrector results in a predefined value when the given portion has not been improperly modified.