Run-time call stack verification is used to determine that a code module
has been called by a legitimate caller. A return address on the stack
indicates where execution is to return upon execution of the next return
instruction, and this return address is indicative of where the code
module was called from. The code module may determine that the call is
allowed, or disallowed, based on the location of the return address. A
calling convention is provided that allows the code module to be called
through an intermediary, while also preserving the original return
address that was in effect at the time the intermediary was called and
also resisting modification to the call stack during the time that the
original return address is being verified.