先说值不值得:这是一门“啃硬骨头”的底层课
这门课的核心目标只有一个:让你真正理解 Linux 内核是如何运行的。很多初学者看内核源码就像看天书,根本原因是不懂机器底层的执行逻辑。中科大老师的这套教程不教你怎么敲命令,而是从存储程序计算机模型出发,带你彻底搞懂数据在硬件里是怎么流动的。如果你只是想应付日常运维,直接查文档更快;但如果你想成为能读源码、排疑难杂症的工程师,这套课里的汇编基础和操作系统原理是绕不开的基石。
适合什么基础,建议先看哪几块
课程对零基础略显残酷,因为它假设你已经了解基本的编程概念,比如指针和内存管理。最稳妥的路径是跟着视频顺序来,不要跳步。首先要啃下 X86 汇编基础,特别是寄存器操作和 push/pop/call/ret 这些栈指令,这是理解后续一切的前提。接着看反汇编 C 程序的章节,这会打破你对高级语言的固有认知,让你看到代码在 CPU 眼里长什么样,明白编译器是如何将高级逻辑转化为机器动作的。最后深入函数调用堆栈和参数传递机制,这部分结合视频里的动态演示,能帮你建立起“三个法宝”的系统观。建议在看完反汇编部分后,暂停视频自己推导一下局部变量在栈上的布局,再验证答案,这样印象会深刻得多。
学完能独立做什么,资料怎么配合
完成这门课的学习,你将具备独立分析程序执行流的能力。具体来说,你不再只是调用 API,而是能对着 gdb 的反汇编输出,清晰地解释每一个函数调用背后的栈帧变化,以及系统调用是如何从用户态陷入内核态的。这种能力对于从事后端开发、嵌入式 Linux 或系统调试工作至关重要,也是未来深入阅读 Linux 内核源码的必要入场券。配合练习时,务必动手打开汇编器,对着视频里的 C 代码实例自己进行反汇编验证。资料中的图文总结是最好的复习提纲,建议在每节课结束后先不看视频,尝试凭记忆画出数据流向图,再对照 PDF 查漏补缺。这种“先思考后验证”的学习闭环,比单纯被动观看视频更能帮你把内核的工作机制内化为本能。
课程目录
1.存储程序计算机工作模型 HowtheComputerWorks.pdf 存储程序计算机工作模型.mp4 2.X86汇编基础 1.X86 Registers.mp4 2.X86汇编指令一(mov指令及几种内存寻址方式).mp4 3.X86汇编指令二(push、pop、call、ret).mp4 4.分析几个汇编指令片段(一).mp4 5.分析几个汇编指令片段(二).mp4 3.反汇编一个简单的C程序分析其汇编指令执行过程 1.反汇编一个简单的C程序.mp4 2.C程序和对应的汇编指令.mp4 3.完整汇编程序执行过程分析.mp4 执行过程演示.gif 4.操作系统是如何工作的? 1.三个法宝.mp4 2.深入理解函数调用堆栈.mp4 3.参数传递与局部变量.mp4 FoundationsForHackingLinux.pdf 计算机是如何工作的?(总结)——三个法宝.txt 5.利用mykernel实验模拟计算机硬件平台 1.mykernel实验背后涉及的思想.mp4 2.利用mykernel实验模拟计算机硬件平台.mp4 mykernel实验指导.txt 6.在mykernel基础上构造一个简单的操作系统内核 1.C代码中嵌入汇编代码的写法.mp4 2.一个简单的操作系统内核源代码.mp4 3.运行这个精简的操作系统内核.mp4 7.Linux内核源代码简介 1.Linux内核源代码 8.构造一个简单的Linux系统 1.构造一个简单的Linux系统MenuOS 实验指导 9.跟踪调试Linux内核的启动过程 1.使用gdb跟踪调试Linux内核的方法.mp4 2.简单分析一下start_kernel.mp4 Linux内核启动过程相关的参考资料.txt 10.用户态、内核态和中断 1.用户态、内核态和中断 11.系统调用概述 1.系统调用概述.mp4 SystemCall.pdf 12.使用库函数API和C代码中嵌入汇编代码触发同一个系统调用 1.使用库函数API获取系统当前时间.mp4 2.C代码中嵌入汇编代码的写法.mp4 3.使用C代码中嵌入汇编代码触发系统调用获取系统当前时间.mp4 13.给MenuOS增加time和time-asm命令 1.给MenuOS增加time和time-asm命令 14.使用gdb跟踪系统调用内核函数sys_time 1.使用gdb跟踪系统调用内核函数sys_time 15.系统调用在内核代码中的处理过程 1.系统调用在内核代码中的工作机制和初始化.mp4 2.简化后便于理解的system_call伪代码.mp4 3.简单浏览system_call到iret之间的主要代码.mp4 16.进程的创建 使用GDB跟踪创建新进程的过程.wmv 创建的新进程是从哪里开始执行的.wmv 浏览进程创建过程相关的关键代码.wmv 理解进程创建过程复杂代码的方法.wmv 进程的创建概览及fork一个进程的用户态代码.wmv 进程的创建的创建和撤销资料参考.txt 17.进程的描述 进程描述符task_struct数据结构(一).wmv 进程描述符task_struct数据结构(二).wmv 18.预处理编译链接和目标文件的格式 可执行程序是怎么得来的.wmv 新建文本文档.bat 目标文件的格式ELF.wmv 静态链接的ELF可执行文件和进程的地址空间.wmv 预处理编译和链接相关命令参考.txt 19.可执行程序共享库和动态链接 可执行程序共享库和动态链接.txt 装载可执行程序之前的工作.wmv 装载时动态链接和运行时动态链接应用举例.wmv 20.可执行程序的装载 sys_execve的内部处理过程.wmv 使用GDB跟踪sys_execve内核函数的处理过程.wmv 可执行程序的装载.txt 可执行程序的装载与庄生梦蝶的故事.wmv 可执行程序的装载相关关键问题分析.wmv 浅析动态链接的可执行程序的装载.wmv 21.进程切换的关键代码switch_to分析 进程上下文切换相关代码分析.wmv 进程的调度时机与进程的切换.txt 进程调度与进程调度的时机分析.wmv 22.Linux系统的一般执行过程 linux系统执行过程中的几个特殊情况.wmv Linux系统的一般执行过程.txt linux系统的一般执行过程分析.wmv 内核与舞女.wmv 23.linux系统架构和执行过程概览 LinuxArchitectureAndSystemExecution.pdf linux操作系统架构概览.wmv 从CPU和内存的角度看linux系统的执行.wmv 最简单也是最复杂的操作--执行ls命令.wmv






