随着软件复杂度的不断增加,软件调试的难度越来越大。以调试器为核心的调试技术是征服软件世界的一把利剑。要想成为软件高手,认真修炼软件调试这门剑法是再多也不为过的。本训练营通过12个精选案例让参与者在实战中“事上磨练”,快速进阶。这些案例都来自真实的软件产品和项目,既有深度,又有广度,覆盖Windows和Linux两大平台,编程语言方面涉及C/C++和.Net等。涵盖的技术包括交互式调试(用户态和内核调试),转储文件分析,逆向工程,反调试(加壳)与化解等。训练营由《软件调试》和《格蠹汇编》的作者张银奎(格蠹老雷)亲任教练,现身说法。
时间:2017年6月2-4日(周五-周日)(三天两晚封闭训练,挑灯论剑)
地点:庐山秀峰景区内松雪楼(住)和中正行营(研习)
培训对象:在Windows或者Linux平台上从事开发或测试的软件工程师、项目带头人和技术经理
热身篇:双剑合璧——WinDBG与GDB之理一分殊(90分钟)
概要:以GDB和GNU事业的开创者Richard Stallman和NT内核之父David Cutler的传奇故事开场,这一部分将介绍GDB和WinDBG这两大调试器的核心特征和关键用法,比较其异同。让听者在传奇的故事和精彩的演示中快速掌握这两把利剑的基本招式。
概述:这是一个因为软件故障而导致外接鼠标键盘无法工作的诡异问题,它与移动硬盘配套软件的后台服务有关,但也与操作系统系统函数的疏漏密不可分
工具和主要技能:WinDBG,转储文件分析,反汇编,从栈上观察参数,无源代码调试(跟踪第三方代码)
知识点:栈,堆的布局,strcpy的实现,rep movs,x86寄存器的约定用法,溢出,异常,CONTEXT和EXCEPTION_RECORD,DeviceIoControl
概述:Linux下重要后台服务(Daemon)随机崩溃,深挖到底,竟然与C语言的规范有关,让你深刻认识C与C++的一个大不同之处,感受著名的头文件陷阱
工具和主要技能:GDB,GCC,map,dmesg,调试Linux应用程序,反汇编,插入代码JIT调试
知识点:虚拟内存,分页机制,页表,缺页异常,段错误,空指针,AT&T汇编和Intel汇编,调用规约
概述:应用程序与驱动程序通信时,驱动程序总是收到错误的数据,打印出来观察,竟然是日志信息送给了驱动…
知识点:虚拟文件系统,Linux驱动程序,sysfs,与应用程序通信,标准文件
概述:向Powerpoint粘贴文件时,它突然挂死,过错却不在它,而是与系统机制(DDE)有关,不负责任的第三方服务软件也是导致问题的关键因素
工具和主要技能:WinDBG,内核调试,在内核调试会话中调试应用程序
知识点:剪贴板,DDE,OLE,系统调用,消息机制,Send与Post的区别,广播消息,Win32K,服务程序,服务循环
战役5:.Net程序调试之SDK安装程序死循环(90分钟)
概述:Windows7 Platform SDK安装程序停滞不前,多次重试无果,上调试器发现是因为异常处理不当而陷入死循环
工具和主要技能:WinDBG,使用WinDBG +SOS扩展分析.Net程序的转储文件,使用ildasm反汇编.Net程序
知识点:异常,try{}catch,try{}finally,动态语言,Dispose方法,方法表,属性,托管异常
概述:多个线程的首要问题是如何同步?做的不好有可能导致死循环,也有能出现死锁,本战役对这两种情况各举一例,一个是DUMP,一个是活动目标
工具和主要技能:WinDBG,多线程调试,观察线程的执行时间
知识点:线程和进程,管理线程和进程的数据结构,TEB,fs/gs段,volatile关键字,死循环,临界区,!locks, !cs -l,CPU提供的同步设施,LOCK前缀,互锁系列,intricins,同步方法之比较
概述:严重的双误崩溃大多是因为栈枯竭导致的,栈怎么会用完呢?一位书友最先向我反应了这个问题,后来在显卡驱动中又多次遇到这个问题
知识点:异常的分类,中断处理,IDT表,双误,显卡驱动,DPC,内核态栈,操作系统的任务切换机制;CPU的硬件任务切换;内核态栈溢出;任务状态段TSS,内核态栈溢出; CR2寄存器;CR3寄存器,GPU,显卡驱动概要
概述:系统级挂死(system hang)大多与驱动程序有关,但这个系统级挂死确实不只是软件的问题
工具和主要技能:WinDBG,转储分析,手动触发系统崩溃,根据反汇编结果产生C/C++代码
知识点:DPC,IRQL,硬件资源分配,!arbiter,设备栈,中断处理,USB的端口状态寄存器
概述:使用多种方法调试Win7系统中电源管理服务发生崩溃而导致系统反复重启的问题,使用内核调试解决复杂的用户态问题,探讨软件的安全问题
工具和主要技能:WinDBG,内核调试,JIT调试,使用内核调试会话调试用户态问题
知识点:栈缓冲区溢出;基于Cookie的溢出检测;服务崩溃;未处理异常,异常的分发过程,JIT调试的原理,会话0,强制登出(logoff),fail fast,GCC的栈溢出保护
概述:以一个典型的因为字符串类使用不当而导致的堆错误为例,深刻理解进程中的多个CRT堆,堆管理器的脆弱之处,字符串类分配内存的方法,静态链接和动态链接可能产生的影响,分享使用堆的最佳实践,思考面向对象设计的基本问题
工具和主要技能:WinDBG,交互式调试,硬件断点
知识点:堆,堆管理器,CRT,CRT的多个实例,静态链接CRT和动态链接CRT,析构,字符串类,自动内存分配
概述:现场定位Windows资源管理器中右键菜单异常缓慢的原因,在调试器中观察“本地程序中的托管来客”
工具和主要技能:WinDBG,交互式调试,调试性能有关的问题 粗体文字 编程语言:C/C++
知识点:混合代码情况下的未处理异常;栈溢出;浮点计算单元和浮点寄存器;浮点异常的延迟性;上下文扩展模块的注册方法
概述:现场调试经过加壳保护的应用软件,介绍反调试的典型方法和原理,以及化解之道
工具和主要技能:WinDBG,IDA Pro,反汇编,交互式反汇编,Anti-VM和应对
知识点:单步标志,硬件断点寄存器,异常处理器,加壳保护的一般方法,检查调试器,隐藏调试器,记时法反跟踪,内存HASH检测,倒车调用,花指令,虚拟机,检测在虚拟机中运行的方法,检测VM之I/O端口,VMWare后门,VPC后门,SIDT方法,STR指令
张银奎,微软全球最有价值技术专家(MVP),同济大学电子与信息工程学院特邀讲师,前英特尔亚太研发有限公司软件架构师。《软件调试》、《格蠹汇编》的作者,新版《十万个为什么》电子分册撰稿人之一,《程序员》杂志调试之剑栏目作者 。1996年毕业于上海交通大学信息与控制工程系,在软件产业工作20年,在多家跨国公司历任开发工程师、软件架构师、开发经理、项目经理等职务,对IA-32 架构、操作系统内核、驱动程序、虚拟化技术、云计算、软件调优、尤其是软件调试有较深入研究。从2005年开始公开讲授“Windows内核及高级调试”课程,曾在微软的Webcast和各种技术会议上做过《Windows Vista内核演进》、《调试之剑》(全球软件战役研究峰会)、《感受和思考调试器的威力》(CSDN SD2.0大会)、《Windows启动过程》、《如何诊断和调试蓝屏错误》、《Windows体系结构——从操作系统的角度》(以上三个讲座都是微软“深入研究Windows内部原理系列”的一部分)等。翻译(合译)作品有《现代x86汇编语言编程》、《21世纪机器人》、《观止——微软创建NT和未来的夺命狂奔》、《数据挖掘原理》、《机器学习》、《人工智能:复杂问题求解的结构和策略》等。
• 研习班期间(6月2日上午至6月4日下午4:30)的住宿、餐饮和茶点 (不包括往返庐山的交通费用和以上费用之外的其它费用)
3)在校学生或者个人自费参加请联系课程顾问询问优惠价格(视报名时间而不同)
a) Cindy Long,电话:13621638537,电子邮件:cindy.long@leshanting.cn
b) Lisa Zhang ,电话:13801874134,电子邮件:lisa.zhang@leshanting.cn
3)也可以扫描如下二维码,关注“格友”公众号后,发送2017后便可以提交报名信息或者提问。