A quick introduction to one of the interprocess communication mechanisms in linux.
00:00 Main idea. We want to execute a function when external signal arrives
00:50 While loop. We can’t simply jump to the signal handler!
01:24 Interrupts. Breaking a natural instruction flow
02:30 Saving registers. Kernel preserves user register values
03:09 How pc is saved
04:03 The most important idea! Replacing the pc
04:40 Big Picture overview.
05:55 To the Source code!
07:16 Kernel entry. Disassembling my kernel binary
12:04 Replacing the program counter
12:35 Return to user.
13:28 Signal handler is finished. How to resume the main code?
14:14 How the stack works when enter the kernel
16:26 We need to keep main code’s original registers!
16:49 Kernel stack has to be empty. Overflow. Nested signals
17:30 Saving original regs to user stack
18:48 Kernel trampoline. Sigreturn
20:45 Bonus! (about the compiler bug video)