1. A computer implemented method of randomizing locations of variables in a stack associated with a software application, prior to said randomizing locations, the stack including, in order from a bottom of the stack to a top of the stack, a return address for a function call, a local variable and an attackable buffer, the method comprising: identifying, by one or more processors, a local function in the software application; identifying, by the one or more processors, a plurality of stack locations of a plurality of variables in the identified local function; identifying, by the one or more processors, references to each of the plurality of variables in the identified local function; shuffling, by an executable loader that loads the software application, the stack locations of the variables to produce shuffled stack locations of the variables, each time that the software application is loaded into a memory, wherein each execution of the software program results in a different shuffling, wherein said shuffled stack locations of the variables changes a critical stack distance between the return address for the local function and the attackable buffer, and wherein the critical stack distance is a sum of a size of the local variable and a size of the attackable buffer; and updating the stack locations of the variables with the shuffled stack locations.