致力于提升研发企业的持续创新能力

结盟众多企业“教练”, 共同设计、开发及提供人才培养解决方案,通过新颖多样的学习方式,针对性的定制化内容,助力企业全面提升竞争优势。

课程分类列表

驱动开发与软件调试封闭训练营
课程类别:开发语言工具

调试 驱动

课程讲师:

张银奎

课程周期:

5天

课程费用:

7500元/人

本课程培训周期为5天 软件中有大机遇,也有大挑战。随着软件复杂度的不断增加,以及用户对软件安全性、可靠性、性能和功耗等方面的要求不断提高,熟练掌握和运用软件调试这把利剑来征服软件世界对每个软件工程师来说都迫在眉睫。 形式:集中研习和封闭训练,上午讲解,下午实战训练,晚上讨论交流 训练内容:Windows,Linux和Android三大平台的核心设施、用户态调试和内核调试,WinDBG、GDB两大调试器,64位系统和应用程序调试,Windows和Linux驱动程序开发和调试(详细大纲见附表)

培训大纲

第1日:CPU篇——溯本追源,以一摄万

主题 长度 要点
软件简史 1小时 卡片,逻辑分析引擎,子过程和栈,KDF 9,B5000,二仪攸分以及与国学的契合
处理器精要 1.5小时 内存管理,中断和异常,寄存器,管中窥豹,宏汇编和最常用的汇编指令,SoC
中断管理器 1小时 8259,APIC,中断的优先级别,在Windows和Linux操作系统中的使用
CPU的调试支持 2小时 UNIVAC I,软件断点,硬件断点,单步标志,分支和异常记录,机器检查异常,JTAG调试
实验1.1 1小时 探索页表中隐藏的秘密
实验1.2 1小时 IDT Hook(编译和改写驱动程序和软件工具)
实验1.3 1小时 CPU Where (使用分支记录机制理解CPU的分支预测)
讨论 1.5小时 异构计算(Heterogeneous Computing)

第2日:异常篇——探赜索隐,原始反终

主题 长度 要点
基于信号的异常处理 1小时 Unix,Linux,POSIX,信号一览,信号处理器,信号的分发和处理过程,segmentation fault,dmesg,及时调试
ptrace和GDB 1小时 Linux下的用户态调试模型,ptrace的参数和用法,调试器循环,模型的不足,GDB简介,GDB的常用和难用命令,使用GDB做远程调试
结构化异常处理 1.5小时 硬件异常,异常在内核态的分发过程,异常的两轮分发,在用户态的分发和处理,未处理异常
Windows的用户态调试模型 1小时 Dbgk,调试API,用户态调试器框架,WinDBG解析,调试事件,定制调试事件的处理方式
向量化异常处理 0.5小时 向量化异常处理器,编写的注意事项,与结构化异常处理器的比较
用户态转储和转储分析 1.5小时 Windows的Mini Dump,产生方法,分析方法;Linux下的Core dump,配置,使用GDB分析Core dump
实验2.1 0.5小时 JIT调试
实验2.2 0.5小时 使用GDB调试段错误
实验2.3 0.5小时 使用WinDBG分析转储文件
实验2.4 0.5小时 使用GDB分析转储文件
实验2.5 0.5小时 Android应用程序高级调试
实验2.6
(可选)
0.5小时 探索C++、.Net和Java语言中的异常处理器,编译方法,对象展开,意外出口
讨论 1.5小时 异常处理的最佳实践

第3日:内存篇——坤厚载物,行地无疆

主题 长度 要点
存储技术概览 0.5小时 存储技术的简要发展过程,趋势,RAM、ROM和闪存,移动平台的存储系统分析
内存管理器 1小时 NT的内存管理器简介,大内存页及其使用,6大工作线程,内核池,分页内核和非分页内核池,PFN数据库,虚拟地址空间的管理(VAD),与Linux内核源码的比较学习
栈上风云 1.5小时 栈布局,栈的创建过程,自动增长机制,栈帧的组织方法,栈溢出攻击的原理,基于Cookie的溢出检测机制(MSC和GCC),内核态栈溢出和双误,案例:双误导致的系统崩溃
1.5小时 内存管理的多层次架构,Windows 32堆管理器,分配函数,页堆,内存泄漏的检测方法,Linux的内存管理,maps文件,glibc heap,堆块分析
实验3.1 0.5小时 验证机制的原理,实现方法,使用方法
实验3.2 0.5小时 理解栈溢出攻击
实验3.3 0.5小时 追踪和分析Android程序的堆分配
讨论 1小时 软件工程师的职业规划

第4日:设备篇——理一分殊,格物致知

主题 长度 要点
Linux的内核模块 2小时 开发环境,基本结构,init函数,模块参数,加载和移除,字符设备与块设备,/dev 和/sys 文件系统,proc fs,printk和dmesg
Linux和Android的内核调试 1.5小时 本地内核调试的原理、设置和使用方法,/proc/kcore,双机内核调试的原理,KDB,命令解析
ACPI精要 1小时 ACPI简介,ASL基础,控制方法,在Windows和Linux驱动程序中调用ASL方法
WDM驱动程序框架 1小时 WDM基本框架,驱动类型,过滤驱动和设备栈,I/O管理器,驱动程序的基本函数(DriverEntry、AddDevice和Unload),驱动的编译环境和构建方法,注册和加载
I/O请求 1.5小时 IO请求包(IRP),设备驱动程序与I/O管理器的交互,IRP的分发过程,IO控制代码(IOCTL)、IRP包的处理方式,处理电源事件
IRQL和DPC 1小时 中断请求级别(IRQL)的定义和作用,挂死在高IRQL演示,延迟过程调用(DPC)的用途和编写方法
USB设备驱动 1小时 USB总线简介,USB设备栈,UHCI、EHCI和XHCI,硬件寄存器,传输数据
Windows的内核调试 1小时 本地内核调试,kldbgdrv,内核调试引擎,通信方式,USB3和以太网,调试bootmgr,Hyper-v
实验4.1 0.5小时 使用KDB调试Linux驱动程序
实验4.2 0.5小时 调试排除WDM驱动程序的电源事件处理错误
实验4.3 0.5小时 根据转储文件定位USB驱动中的错误
讨论 1.5小时 NT内核与Linux内核之比较

第5日:交互篇——万物并育,大道并行

主题 长度 要点
网络 2小时 网络简史,Socket API,NT的网络架构,WinSock API,LSP (Layered Service Provider),AFD,Kernel Socket,TCP/IP,NDIS,Windows Filter Platform (WFP)
文件系统 2小时 磁盘和文件系统架构,磁盘驱动,端口驱动,卷,分区,文件系统的注册和挂接,文件系统的过滤驱动,Mini Filter,案例分析:因为文件过滤驱动而导致的系统死锁
多线程和同步 1.5小时 Windows和Linux下的线程API,关键区,关键的死锁,CPU提供的同步机制,重要的调试命令,案例分析
RPC 1小时 RPC标准,RPC API,调试设施,案例分析
调优 1.5小时 WPT和xPerf,使用xperf做简单调优,vTune简介,使用vTune发现热点和瓶颈,游戏调优工具(GpuView和GPA)
实验5.1 0.5小时 编写和调试文件过滤驱动
实验5.2 0.5小时 游戏和视频程序优化

注:以上大纲为计划内容,实际培训内容可能略有变化

找到所需课程了吗?即刻 填写申请表格 与我们联络吧