What will you learn from this course?Basics of Inline AssemblyTypes of Inline Assembly: Basic and ExtendedGCC Assembly Syntax: AT&TConstraint stringsInput and output operandsClobberingVarious use cases of Inline assembly in Linux kernel: Interrupts, I/O Ports, Atomic operations, CPUID, Control Registers, Timestamp counters etcDeep understanding of system calls: Various ways of switching from user space to kernel space (int $0x80, sysenter/sysexit, syscall/sysret)VDSOAdding a new system call which doesn't accept any argumentsAdding a system call which accept argumentKernel Symbols and Kernel Symbol tableWriting a kernel module which overwrite the kernel symbol tableWriting a kernel module which sniffs the parameters passed to a system callExamples covered in this course:Add two numbers in inline assemblyAdd three numbers in inline assemblySubtract, divide, multiply in inline assemblyCan we disable/enable interrupts in user spaceChecking whether interrupts are enabled and disabled in user spaceEnabling/Disabling interrupts in user spaceImplementing simple locking to avoid race conditions: Lock prefix, compare and exchange instructionsAnd many
What you'll learn
Understand the basics of inline assembly
Explore types of inline assembly: basic and extended
Gain familiarity with GCC Assembly Syntax
Learn about kernel symbols and the kernel symbol table
Write kernel modules for various tasks
Course objectives
To provide a comprehensive understanding of system calls in Linux
To teach practical skills in writing and managing kernel modules
To develop expertise in using inline assembly within the Linux environment