псевдокод уязвимой функции
Int32 random_number; // глобальный canary, генерируемый случ. образом
foo
(int a, void (*fn)()) // уязвимый аргумент-указатель
{
volatile int32 guard; // локальная копия canary, охраняющая кадр
char buf[128]; // буфер идет перед переменными, но после аргум.
(void *safefn)() = fn; // копируем аргумент во временную переменную
guard = random_number; // копируем глобальный canary в лок. переменную
gets
(buf);
// вызываем уязвимую функцию
(*safefn)();
// вызываем функцию по скопированному указателю
if (guard != random_number) /* program halts */
}