结盟众多企业“教练”, 共同设计、开发及提供人才培养解决方案,通过新颖多样的学习方式,针对性的定制化内容,助力企业全面提升竞争优势。
张银奎
5天
7500元/人
本课程培训周期为5天 软件中有大机遇,也有大挑战。随着软件复杂度的不断增加,以及用户对软件安全性、可靠性、性能和功耗等方面的要求不断提高,熟练掌握和运用软件调试这把利剑来征服软件世界对每个软件工程师来说都迫在眉睫。 形式:集中研习和封闭训练,上午讲解,下午实战训练,晚上讨论交流 训练内容:Windows,Linux和Android三大平台的核心设施、用户态调试和内核调试,WinDBG、GDB两大调试器,64位系统和应用程序调试,Windows和Linux驱动程序开发和调试(详细大纲见附表)
主题 | 长度 | 要点 |
软件简史 | 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) |
主题 | 长度 | 要点 |
基于信号的异常处理 | 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小时 | 异常处理的最佳实践 |
主题 | 长度 | 要点 |
存储技术概览 | 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小时 | 软件工程师的职业规划 |
主题 | 长度 | 要点 |
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内核之比较 |
主题 | 长度 | 要点 |
网络 | 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小时 | 游戏和视频程序优化 |
注:以上大纲为计划内容,实际培训内容可能略有变化