Same, the only thing I can think of is doing something with the pointers in the fns variable in main, but I can't quite figure out what to do.
Several posters have hinted at buffer overflow, but I'm not yet seeing a buffer that I can overflow.
[edit: Nevermind, I got it. Whew.]
(gdb) x/4x fns
0xffeaa0cc: 0x080485e4 0x08048640 0x0804869c 0x08048719 (gdb) x run
0x804875b <run>: 0x83e58955 (gdb) gdb) x/40x (void*)fns-0x40
etc.