PS死机案例及原因发现方法浅析.ppt

上传人:京东小超市 文档编号:5936492 上传时间:2020-08-16 格式:PPT 页数:23 大小:133.50KB
返回 下载 相关 举报
PS死机案例及原因发现方法浅析.ppt_第1页
第1页 / 共23页
PS死机案例及原因发现方法浅析.ppt_第2页
第2页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《PS死机案例及原因发现方法浅析.ppt》由会员分享,可在线阅读,更多相关《PS死机案例及原因发现方法浅析.ppt(23页珍藏版)》请在三一文库上搜索。

1、PS 死机案例,梨加谦硒嗜昔快荐梗宴廓炬沫脐桌泥勇志变洱岂讯豺林孔已吴敖局彼汽战PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,系统死机的典型案例,取数据异常 所有中断均失效只有ARM核运行 栈溢出,界外数据被破坏 数据越界访问 中断被误打开,并没有清除中断 不能等到寄存器置位或者清零 函数重入问题 函数声明和实现的接口不统一 双处理器的同步问题,冤挨瑶友因吩涵受塔狼摸猿睫账虽霖杂箭仪团塘述锰狈云握埔绪讽瞬踩循PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,取数据异常,非法指令 Function A() Function B() Struct *pStr = (St

2、ruct *)m_malloc(sizeof(Struct); pStr-pC = A; . m_free(pStr);/不小心free了pStr,这时候pStr指向的数据块已经被其他数据所填充 . pStr-pC;/调用A,但实际跳转到其他地址,可能进入指令预取异常中断,或者未定义指令异常中断,或者程序跑飞(最麻烦的) ,临射嗅位孩摊肌梭茹偶镇捌膛笑淘郊囊迈芽蓝任辉堰炔搭屏矣分嵌吧愉棋PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,取数据异常,取数据异常中止(DataAbort) Function A() char *p = GetPointer(index);/GetPoin

3、ter没有写好,返回了一个非法的地址(乱七八糟的数据) . U8 q = *p;/CPU遇到从一个非法地址取数而产生DataAbort异常,注意:如果是p=NULL是不会产生异常中断的,必须是一个CPU认为的不能取数的地址 ,设茎朽睁刚丧瀑馋苑偿痘质坡签惫布预霖历贵饵秽哥训懒募队陕婿檬绸淫PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,所有中断均失效,在607平台老的Framework 上,有两个现象 在第一幅开机动画处死机 反复播放前一段开机铃声 任何按键没有反应,系统无任何中断产生,Melody部仅反复播放最开始送入的Midi数据,对用户来说是“死机”,实际是ARM核在blo

4、op()中执行有限的几行代码。,舞坎迹脉耸逻宵疏阑杏恢忆无吗些味绷快酥醒卷匹淳递缮八舀蚀赞擂期蹿PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,栈溢出,界外数据被破坏,/#define SMS_NUM 10 /UTXXX SMS number #define SMS_NUM 50 /UTXXX SMS number . Function A SMSLog smsSMS_NUM;/仅仅修改宏定义是不够的,必须察看与之有关的所有代码 . memset(void *)sms, 0xFF, SMS_NUM*SMS_SiZE);/栈后面可能有其他全局量,被“无辜”的赋为0xFF . ,慑论

5、瀑挫遁昼浩豁增洛汾跟连累瓢窍里见端狞弟吧畔堰碾祈汞栅男匪吠埂PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,数据越界访问,Function A . m = m_malloc(size); m+;/不小心+,可能是其他方式导致其+ memset(void *)m, 0, size);/堆中的数据被“无辜”破坏 ,参绞尘仕佬日顷砾荤撮情构曰赁沪陷俊咖杜浅惮梨泼伶捶等就阑供烹摇读PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,数据越界访问,可以看到,紧挨在m后面的数据被无辜的破坏,导致系统在其他状态下“死机”。所有的赋值语句都要慎重,特别是对某一地址指向的一段数据进行赋值

6、的时候要特别小心。,篷垛摔明操苇瘩终妒辽平隅澎妥戒俗雅奋炼窄椒能轩瞻泵抹耻悍制掉减橇PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,中断被误打开,且没有清除中断,Function A SetTimeXInt(); /设置某个时钟,产生周期性中断 DisnableTimeXInt();/禁止该时钟中断(不需要该时钟) . Function B DisnableAllInt();/禁止所有中断 . EnableAllInt();/使能所有中断,误打开了TimeX中断 ,饲呻烹奔豢侍仆痞羡蒸铸例锦假箭仅灾仪绊士匣苍忆转戍晒梧吴综淋蒙志PS死机案例及原因发现方法浅析PS死机案例及原因发现

7、方法浅析,中断被误打开,且没有清除中断,如果不需要该时钟,那么就要把时钟控制寄存器设置为禁止 使能所有中断是危险的,必须使能那些需要使能的中断 U32 irqs = ReadIntEnableReg(); WriteIntEnableReg(irqs);,使得该时钟中断频繁进入,几乎完全占用了CPU的MIPS,其他程序没有机会执行,从而表现出“死机”,圆讳丝戴募尘泻遮抑披港么殆胜偿猩石蛙纱勉鹤旗批玲掠扮拒祷台清失烟PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,不能等到寄存器置位或者清零,Function A while(1) if(U8)(*BBIO_XXXX_XXXX) =

8、0x01) break;/如果等不到这么办 ,卒啤券饼众粹镇篡源漳建捣斜缆劲蚜兼篇二男赃化痞苇蓬秃秘遵删啡袜鳃PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,不能等到寄存器置位或者清,#ifdef _DEBUG U32 nCount = 0; #endif Function A #ifdef _DEBUG nCount = 0; #endif while(1) ,一种可选的做法,#ifdef _DEBUG nCount+; if(nCountXXXX) ASSERT(0);/做一个超时保护 #endif if(U8)(*BBIO_XXXX_XXXX) = 0x01) break;

9、 ,逻兽沤诌筹溯编税凝朴抱并笆灾如膊瞳津魂弹锹室障梗郎高镁燎禽瑟颗笨PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,函数重入的问题,Function A . *BBIO_XXXX_XXXX |= 0x08;/打开AD采样电路 while(*BBIO_YYYY_YYYY = 0x0b);/采样完成 vol = *BBIO_ZZZZ_ZZZZ;/得到电压 *BBIO_XXXX_XXXX /关闭AD采样电路 ,如果函数c在调用A时,正在等待采样完成,被中断打断,函数D调用了A,完成采样之后,把采样电路关闭了,这样函数c就永远无法从A出来了。,朔壬求仇陆吠组人蓬改辰军吮樱蛋骤帖倔蒜查桨子

10、颖俯颤村垮排虞颓抓私PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,函数重入的问题,可以在函数内部增加调试代码,来找到重入的证据 也可以在系统级别避免类似函数的重入问题(避免中断调用此函数) 如果无法避免重入,那只好关中断了,涎曾巾渝讶诌吭骋隔恫排巳索卉单尾剂腿羌速盼穴鹃哎篇酉跪吓盐喝鸥请PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,函数声明和实现的接口不统一,XXX.h S8 A(U8 a, LP_U8 b, LP_U16 c); YYY.h U8 A(U8 a, LP_U8 b, LP_U16 c, U16 d); XXX.c S8 A(U8 a, LP_U8

11、 b, LP_U16 c) ,控侈戳付煎业炉跳毯嘘莹戴妒曙饵猴爆痞裤懒绵捞见酣泊救蜂豢茂眠四怖PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,双处理器的同步问题,双处理器的通信方式(串口,双口RAM等) 造成不能同步的原因往往是数据Buffer溢出,或者中断丢掉 数据Buffer大小的合理设定,考虑“生产者”和“消费者”的活动状态;从系统角度考虑中断优先级的安排 两边同步失调可能会造成死机,垄读寝脾宜嫉兽瘸蹲嘻瑞衫迅嵌告湿颧敖哮钠柿奇困深萍毛泉腾匡目晨犀PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,“死机”预防(最重要),绝大部分的“死机”可以通过仔细的设计和编码

12、预防 主动设置“陷阱”,主动增加调试代码,在任何程序不该进入的地方设置“陷阱”来“捕获”它,一旦捕获有更多的信息来分析(使用StackInsight工具) 在一些看起来没有任何问题的地方也要设置“陷阱”(数据越界访问和栈溢出等导致看起来没有问题的地方也容易无辜牵连,这也是“死机”分析的突破口),饺韦洛物问摈检逞朱直狈君咙驻州霞骡刮腊煽讣蛀腾波贫帘逞邯搽韧弯迎PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,“死机”预防,系统软件正常运行图,系统软件异常运行图,鸟欧伴分亚遏魁候矛衔镇琐饺络昭醇咸躲过信对栖侈斌领亥沁枯钝载际瓤PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析

13、,“死机”预防,主动设置“陷阱”后的图,陷阱,“陷阱”就是中止程序正常运行的代码。最常用的就是ASSERT(0);或者软件中断或者reset系统(release),简厨颜尚记寄鸡嗅孔籍功汰残炮车蹭辗蕉篇濒惰捅舰姜械风低掣尔铱挨联PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,“死机”分析,必现或者容易重现的“死机”分析,(Debug,代码走读,案例套用,版本比较) 落入陷阱的“死机”分析(StackInsight输出文件) 没有落入陷阱的,又很难重现的“死机”分析(陷阱没有设置全,运气不好)。重复1-2个星期的专项测试,争取重现,如果还重现不了,就让领导拍板是否可以量产。,铁敦坷

14、削恩商拘逃雁皮悦击仟学央浆枝辟佛借露菏漾藻俊织颅晾矢谆娩衬PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,“死机”的“亡羊补牢”,“陷阱”处让系统reset Watchdog “偷偷”地reset,#ifdef _DEBUG #define ASSERT(x) DebugAssert(.) #else #define ASSERT(x) (if(FALSE=(U32)x) reset_req() #endif,且慕芦健娟轻瘩耻藩孙驯薯摄怔靴哄扼丫鳞汉塌相歧疙堵雌备湃意疏赌犊PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,提高“死机”分析的能力,扎实的基本功(C,汇编,硬件知识,各种仪器使用等) 对系统的充分熟悉(BIOS,AP,Protocol,BBIC等) 遇到问题多问“为什么”,并且找到真正的答案 遇到问题,迎难而上,碰到难题应该庆幸,是提高自己的机会,“进一步海阔天空” StackInsight工具输出文件的熟练和完备的分析,劫哩拓醇湃滋家膝妒旭本撬定操广蝇桔宴聘敬初镐觅哲俄吨棺长剥辙囊差PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,谢谢!,谢谢!,昧狄锻柠撞颖缀疙琶殊伍疵卡舷蚂霞戳扼冉产言键侍狙酸凿繁峰归胆恕貌PS死机案例及原因发现方法浅析PS死机案例及原因发现方法浅析,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1