extern void dummy( void);
extern void foo(unsigned int x);
void dummy(void ){
printf("func dummy\n");
foo((unsigned int)dummy);
}
void foo(unsigned int x){
*(unsigned int*)(SP+2) = x;
printf("func foo\n");
}
void main(void){
// Ф-ция foo() подменяет свой адрес возврата на dummy()
foo((unsigned int)dummy);
printf(":-("); // Сюда не придет никогда
}