对抗软件瑕疵的最佳实践(一)

1.课程名:对抗软件瑕疵的最佳实践
2.作者:张银奎(Raymond Zhang)
3.作者简介:
>15年编程经历
《软件调试》作者
 译作:《机器学习》《观止--微软创建NT和未来的夺命狂奔》
 《程序员》杂志调试之剑专栏作者
作者更具体的介绍通过http://www.msup.com.cn/solutions/Expert-ZhangYinkui查看
4.培训时间2012/04/20-04/21

后感:两天的培训,如果说学到了什么具体的技术知识,那倒真没有,大部分的时间都只是在接收讲师所传递的一种“可调试化设计”思想,
感叹讲师的无比强大之外,也认识到windows系统完美的可调试化设计,可惜的是他不是做linux/ninux方面的专家,只字没提及linux/ninux方面的东西!

日程
1。软件瑕疵概览
2。软件瑕疵的成本曲线
3。软件的根本
4。D4T和D4D
5。可调试设计--设计
6。程序员强则软件强--开发
7。观止(Showstopper)--测试
8。自动诊断和远程报告--售后


demo 寻找win7 "发疯"的原因
讲师通过自己发现的win7 bug演示了一个缓冲区溢出的案例,具体bug好象是与电源服务有关,时间过的太久了,记不太清了.

stack frame -栈帧
1。供函数使用的一块连续栈区域
2。父函数在下方
3。子函数在上方
4。函数返回即释放
5。常用EBP来记录栈帧基地址
6。FPO(帧指针省略)

缓冲区溢出
栈是向低地址方向生长的,向缓冲区写入超过其容量的内容可以覆盖栈上的函数返回地址,使函数返回到意外的地方--栈溢出攻击便基于此

如何从栈回溯看出溢出
1。异常的函数返回地址
2。观察栈帧长度
3。观察栈帧使用情况

基于cookie的安全检查
1。在栈帧的起始处存放一个整数--cookie
2。visual studio .net 2002开始支持
3。windows server 2003 首先采用
4。编译时,指定/GS选项, 默认启用
5。发布版本和调试版本都可以使用
6。编译时会判断是否有很必要对当前函数使用cookie
7。函数返回时检查cookie的完好性,如果损坏则报告

启示
努力打造逻辑完备、无懈可击的代码,切忌掉以轻心或者想当然

标准标注语言
Standard Annotation Language(SAL)
__CRT_INSECURE_DEPRECATE_MEMORY(memcpy_s)void *
__cdecl memcpy(__out_bcount_full_opt(_Size)void *_Dst,
__in_bcount_opt(_Size) const void *_Src, __in size_t _Size);
#if __STDC_WANT_SECURE_LIB__
_CRTIMP errno_t __cdecl
memcpy_s(__out_bcount_part_opt(_DstSize, _MaxCount)void *_Dst,
__in rsize_t _DstSize, __in_bcount_opt(_MaxCount) const
void *_Src, __in rsize_t _MaxCount);
#endif
安全的CRT函数, xxx_s()

启示
软件的根本在代码,不要脱离代码来讨论软件问题

启示
代码的根本在程序员,程序员的素质相差悬殊,在软件工程师的论证体制完善前,如何甄选程序员是项目经理要练就的关键功夫
好程序员与差程序的产出比是1:28

JTAG
1。Joint Test Action Group
2。成立于1985年
3。JTAG的Test Access Port and Boundary Scan Architecture(测试访问端口和边界扫描架构)提议
于1990年被IEEE批准,简称为IEEE 1149.1-1990
4。CPU普遍采用

NT的经验
调试设施遍布整个系统
 1。内核
 2。执行体
 3。系统进程
 4。系统服务
 5。系统DLL
 6。应用程序

微软的软件强在哪里?我认为是从里到外的可调试性。这种特性赋予产品持续改进的能力,使其可以不断提高,后来居上。

典型技术
1。消息输出
2。日志转储
3。栈回溯
4。断言
5。验证
6。认证
7。自检
8。自动报告
    WER
9。性能计数器
10。Telemetry

目标
 1。可见度
 2。可控制性
   可配置性,可重现性
 3。可诊断性
   可辨识性,一致和稳定性
 4。自动报告和辅助诊断
   Windows Error Reporting(WER), CER, Telemetry
 5。让错误跳出来,而不是藏起来

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值