What will you learn from this course?
Basics of Inline Assembly
Types of Inline Assembly: Basic and Extended
GCC Assembly Syntax: AT&T
Constraint strings
Input and output operands
Clobbering
Various use cases of Inline assembly in Linux kernel: Interrupts, I/O Ports, Atomic operations, CPUID, Control Registers, Timestamp counters etc
Deep understanding of system calls: Various ways of switching from user space to kernel space (int $0x80, sysenter/sysexit, syscall/sysret)
VDSO
Adding a new system call which doesn't accept any arguments
Adding a system call which accept argument
Kernel Symbols and Kernel Symbol table
Writing a kernel module which overwrite the kernel symbol table
Writing a kernel module which sniffs the parameters passed to a system call
Examples covered in this course:
Add two numbers in inline assembly
Add three numbers in inline assembly
Subtract, divide, multiply in inline assembly
Can we disable/enable interrupts in user space
Checking whether interrupts are enabled and disabled in user space
Enabling/Disabling interrupts in user space
Implementing simple locking to avoid race conditions: Lock prefix, compare and exchange instructions
And many