拍案惊奇——软件调试实战训练营

举报
且听风吟 发表于 2019/12/17 11:06:03 2019/12/17
【摘要】 随着软件复杂度的不断增加,软件调试的难度越来越大。以调试器为核心的调试技术是征服软件世界的一把利剑。要想成为软件高手,认真修炼软件调试这门剑法是再多也不为过的。本训练营通过12个精选案例让参与者在实战中“事上磨练”,快速进阶。这些案例都来自真实的软件产品和项目,既有深度,又有广度,覆盖Windows和Linux两大平台,编程语言方面涉及C/C++和.Net等。涵盖的技术包括交互式调试(用户态...

随着软件复杂度的不断增加,软件调试的难度越来越大。以调试器为核心的调试技术是征服软件世界的一把利剑。要想成为软件高手,认真修炼软件调试这门剑法是再多也不为过的。本训练营通过12个精选案例让参与者在实战中“事上磨练”,快速进阶。这些案例都来自真实的软件产品和项目,既有深度,又有广度,覆盖Windows和Linux两大平台,编程语言方面涉及C/C++和.Net等。涵盖的技术包括交互式调试(用户态和内核调试),转储文件分析,逆向工程,反调试(加壳)与化解等。训练营由《软件调试》和《格蠹汇编》的作者张银奎(格蠹老雷)亲任教练,现身说法。

时间:2017年6月2-4日(周五-周日)(三天两晚封闭训练,挑灯论剑)

地点:庐山秀峰景区内松雪楼(住)和中正行营(研习)

形式:实战演练和讨论点评

培训对象:在Windows或者Linux平台上从事开发或测试的软件工程师、项目带头人和技术经理

主办单位:高端调试网站、上海曜印信息科技有限公司

热身篇:双剑合璧——WinDBG与GDB之理一分殊(90分钟)

概要:以GDB和GNU事业的开创者Richard Stallman和NT内核之父David Cutler的传奇故事开场,这一部分将介绍GDB和WinDBG这两大调试器的核心特征和关键用法,比较其异同。让听者在传奇的故事和精彩的演示中快速掌握这两把利剑的基本招式。


实战篇:

战役1:堆损毁导致的随机崩溃和挂死(90分钟)

概述:这是一个因为软件故障而导致外接鼠标键盘无法工作的诡异问题,它与移动硬盘配套软件的后台服务有关,但也与操作系统系统函数的疏漏密不可分

工具和主要技能:WinDBG,转储文件分析,反汇编,从栈上观察参数,无源代码调试(跟踪第三方代码)

编程语言:C/C++,.Net,汇编

知识点:栈,堆的布局,strcpy的实现,rep movs,x86寄存器的约定用法,溢出,异常,CONTEXT和EXCEPTION_RECORD,DeviceIoControl

讨论:宽松接口的副作用

战役2:后台服务因段错误崩溃(90分钟)

概述:Linux下重要后台服务(Daemon)随机崩溃,深挖到底,竟然与C语言的规范有关,让你深刻认识C与C++的一个大不同之处,感受著名的头文件陷阱

工具和主要技能:GDB,GCC,map,dmesg,调试Linux应用程序,反汇编,插入代码JIT调试

编程语言:C、汇编

知识点:虚拟内存,分页机制,页表,缺页异常,段错误,空指针,AT&T汇编和Intel汇编,调用规约

讨论:信任程序员,是耶非耶?

战役3:与驱动程序间通信时的数据混乱(90分钟)

概述:应用程序与驱动程序通信时,驱动程序总是收到错误的数据,打印出来观察,竟然是日志信息送给了驱动…

工具和主要技能:GDB,printk,dmesg

编程语言:C

知识点:虚拟文件系统,Linux驱动程序,sysfs,与应用程序通信,标准文件

讨论:句柄的隐患(多维度审视句柄)

战役4:应用程序挂死之陷在内核态(90分钟)

概述:向Powerpoint粘贴文件时,它突然挂死,过错却不在它,而是与系统机制(DDE)有关,不负责任的第三方服务软件也是导致问题的关键因素

工具和主要技能:WinDBG,内核调试,在内核调试会话中调试应用程序

编程语言:C++,.Net

知识点:剪贴板,DDE,OLE,系统调用,消息机制,Send与Post的区别,广播消息,Win32K,服务程序,服务循环

讨论:(软件)协作思想的对与错

战役5:.Net程序调试之SDK安装程序死循环(90分钟)

概述:Windows7 Platform SDK安装程序停滞不前,多次重试无果,上调试器发现是因为异常处理不当而陷入死循环

工具和主要技能:WinDBG,使用WinDBG +SOS扩展分析.Net程序的转储文件,使用ildasm反汇编.Net程序

编程语言:C#, .Net

知识点:异常,try{}catch,try{}finally,动态语言,Dispose方法,方法表,属性,托管异常

讨论:函数的异常出口

战役6:多线程调试之同步问题 (90分钟)

概述:多个线程的首要问题是如何同步?做的不好有可能导致死循环,也有能出现死锁,本战役对这两种情况各举一例,一个是DUMP,一个是活动目标

工具和主要技能:WinDBG,多线程调试,观察线程的执行时间

编程语言:C/C++

知识点:线程和进程,管理线程和进程的数据结构,TEB,fs/gs段,volatile关键字,死循环,临界区,!locks, !cs -l,CPU提供的同步设施,LOCK前缀,互锁系列,intricins,同步方法之比较

讨论:无锁编程

战役7:转储分析之双误崩溃(90分钟)

概述:严重的双误崩溃大多是因为栈枯竭导致的,栈怎么会用完呢?一位书友最先向我反应了这个问题,后来在显卡驱动中又多次遇到这个问题

工具和主要技能:WinDBG,系统崩溃转储分析

编程语言:C/C++

知识点:异常的分类,中断处理,IDT表,双误,显卡驱动,DPC,内核态栈,操作系统的任务切换机制;CPU的硬件任务切换;内核态栈溢出;任务状态段TSS,内核态栈溢出; CR2寄存器;CR3寄存器,GPU,显卡驱动概要

讨论:单一内核和多内核

战役8:转储分析之系统挂死(90分钟)

概述:系统级挂死(system hang)大多与驱动程序有关,但这个系统级挂死确实不只是软件的问题

工具和主要技能:WinDBG,转储分析,手动触发系统崩溃,根据反汇编结果产生C/C++代码

编程语言:C/C++

知识点:DPC,IRQL,硬件资源分配,!arbiter,设备栈,中断处理,USB的端口状态寄存器

讨论:延迟等待硬件的方法

战役9:缓冲区溢出之系统服务崩溃(90分钟)

概述:使用多种方法调试Win7系统中电源管理服务发生崩溃而导致系统反复重启的问题,使用内核调试解决复杂的用户态问题,探讨软件的安全问题

工具和主要技能:WinDBG,内核调试,JIT调试,使用内核调试会话调试用户态问题

编程语言:C/C++

知识点:栈缓冲区溢出;基于Cookie的溢出检测;服务崩溃;未处理异常,异常的分发过程,JIT调试的原理,会话0,强制登出(logoff),fail fast,GCC的栈溢出保护

讨论:安全开发和调试有关安全的问题

战役10:C++程序中的堆错乱(60分钟)

概述:以一个典型的因为字符串类使用不当而导致的堆错误为例,深刻理解进程中的多个CRT堆,堆管理器的脆弱之处,字符串类分配内存的方法,静态链接和动态链接可能产生的影响,分享使用堆的最佳实践,思考面向对象设计的基本问题

工具和主要技能:WinDBG,交互式调试,硬件断点

编程语言:C/C++

知识点:堆,堆管理器,CRT,CRT的多个实例,静态链接CRT和动态链接CRT,析构,字符串类,自动内存分配

讨论:公开数据成员的得与失

战役11:混合调试之右键菜单异常缓慢(90分钟)

概述:现场定位Windows资源管理器中右键菜单异常缓慢的原因,在调试器中观察“本地程序中的托管来客”

工具和主要技能:WinDBG,交互式调试,调试性能有关的问题 粗体文字 编程语言:C/C++

知识点:混合代码情况下的未处理异常;栈溢出;浮点计算单元和浮点寄存器;浮点异常的延迟性;上下文扩展模块的注册方法

战役12:调试加过壳的软件(90分钟)

概述:现场调试经过加壳保护的应用软件,介绍反调试的典型方法和原理,以及化解之道

工具和主要技能: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和未来的夺命狂奔》、《数据挖掘原理》、《机器学习》、《人工智能:复杂问题求解的结构和策略》等。

附录3:报名与收费

以下所说费用包括:

• 庐山秀峰景区门票

• 研习班期间的旅游意外险

• 包含研习材料的U盘一个

• 研习班期间(6月2日上午至6月4日下午4:30)的住宿、餐饮和茶点 (不包括往返庐山的交通费用和以上费用之外的其它费用)

标准收费:5600元每人

优惠条款:

1)同一单位每5人报名可免一人费用

2)5月20日前报名可以享受8折优惠

3)在校学生或者个人自费参加请联系课程顾问询问优惠价格(视报名时间而不同)

报名或垂询:

1)联系课程顾问:

a) Cindy Long,电话:13621638537,电子邮件:cindy.long@leshanting.cn

b) Lisa Zhang ,电话:13801874134,电子邮件:lisa.zhang@leshanting.cn

2)公司付款账号:

收款单位:上海曜印网络科技有限公司

银行账号:1001122409003035262

本文转载自异步社区。

原文链接:https://www.epubit.com/articleDetails?id=NC7E3EF941A00000180DC7B6E15431467

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。