1. A method executed by one or more computing devices for securing a software program the method comprising: transforming, by at least one of the one or more computing devices, an original software program into a transformed software program during build time, wherein transforming comprises: transforming an original function-call layout of the original software program to a new function-call layout during build time, wherein the new function-call layout is different than the original function call-layout and includes one or more modification instructions; and transforming an original function-call structure of the original software program to a new function-call structure during build time, wherein the new function-call structure includes functionality for dynamically modifying itself during execution; and modifying, by at least one of the one or more computing devices, the new function-call structure during execution of the transformed program based at least in part on the one or more modification instructions, wherein the transformed program is semantically equivalent to the original program and wherein the transformed software program has a control flow structure that is different than a control flow structure of the original software program.