Patent ID: 8407523

Claim:
A method of protecting a software program for execution on hardware, wherein the software program is intended for use on hardware having a known number of available instruction breakpoints, the method comprising: including in the program at least one corruption function having a starting location; including in the program at least one instruction that upon execution on hardware, causes the program to be directed to the corruption function; including in the program additional code that, upon execution on hardware, causes the program to set an available hardware breakpoint such that, when the program has been directed to the corruption function and the starting location is reached during execution on hardware, an exception is generated and the handling of the exception generates a return instruction so that the normal running of the program is resumed, causing the corruption function not to run; wherein: the at least one corruption function comprises a plurality of corruption functions, each having a respective starting location, one corruption function being included for each of said available instruction breakpoints, each of the corruption functions comprising blocks of code which, if executed, adversely affect execution of the program; the at least one instruction that causes the program to be directed to the corruption function comprises a plurality of instructions, with for each of the corruption functions there being at least one instruction that causes the program to be directed to that corruption function; and wherein the additional code that causes the program to set the available hardware breakpoint includes code to set each available instruction breakpoint such that, when the program has been directed to one of the corruption functions and the respective one of said starting locations is reached, a respective exception is generated, and the handling of each exception generates a return instruction so that the normal running of the program is resumed, so that the respective corruption function does not run.